.Net: O que é IL e CLR
--
O processo de compilação de um código escrito em .Net é diferente da compilação tradicional, que gera o chamado código de maquina para cada arquitetura especifica.
Por exemplo, um código escrito em C é compilado para uma determinada arquitetura (x86, x64, ARM).
Já um componente escrito em C# não é compilado para uma arquitetura específica, e sim para uma linguagem intermediária (IL).
A IL serve para ser executada no CLR, o Common Language Runtime. Este sim tem o papel de interpretar e compilar o código para o código de maquina da arquitetura em que esta sendo executado.
Portanto, qualquer linguagem que utiliza as bibliotecas .Net possuem interoperabilidade, pois serão compiladas para uma linguagem comum, a IL e então executadas no CLR.
Outra característica da IL é que a portabilidade dos componentes .Net são possíveis até mesmo para plataformas que ainda não foram inventadas, ja que isso é uma questão de adicionar uma feature ao CLR, dispensando alterações no código fonte.
Também, qualquer melhoria na geração de código do CLR, relacionada a segurança ou a performance, se aplica a códigos escritos antes dessas melhorias existirem.
É dessa forma que uma classe escrita em C# pode consumir uma classe escrita em VB, por exemplo. Porque ambas as classes serão traduzidas para a IL, e o CLR irá compilar e executar a IL.