O ASP.NET permite que usemos múltiplas linguagens em um único projeto web. Embora haja algumas contra-recomendações a respeito dessa prática, esta é mais uma daquelas coisas que é bom termos em mente, pois pode vir a ser útil algum dia. Principalmente para questões didáticas.
Tudo isso é possível porque o conteúdo da pasta especial App_Code é recompilado a cada alteração feita a um de seus arquivos, gerando um assembly que será carregado na memória do servidor. Como este assembly será gerado dinamicamente, podemos configurar a aplicação para usar um compilador diferente em um subdiretório dessa pasta.
Por exemplo, se temos um site feito em C#, podemos criar um subdiretório em App_Code onde ficarão nossas classes feitas em VB.NET.

Depois disso, basta configurar a aplicação para reconhecer esta subpasta como um diretório que contém classes a serem compiladas separadamente. Isto é feito através da tag <codeSubdirectories> do Web.Config:

E pronto! Depois desses dois passos simples, nossa aplicação já reconhece automaticamente as classes escritas em VB e em C# dentro de um único projeto. “Por debaixo dos panos” o ASP.NET vai realmente gerar duas DLLs quando o site for precompilado, mas o interessante é que para o desenvolvedor, tudo funciona como se os arquivos fossem escritos na mesma linguagem, por estarem incluídos no mesmo projeto, e darem suporte completo a Intellisense:

Essa “feature” do ASP.NET 2.0 foi pouco divulgada, e muita gente acaba nem sabendo que ela existe. Como eu mencionei existem contra-indicações para se usar esta funcionalidade, principalmente quando se trata de projetos grandes. Ainda assim é interessante ter isso sempre na cabeça até para fins didáticos, quando se for falar (em suas células acadêmicas, palestras, etc) sobre o suporte a multi-linguagem na plataforma .NET ou sobre o modelo de compilação do ASP.NET, por exemplo.