La idea misma de .Net es que puede usar cualquier idioma con el que ya se sienta cómodo y usar la plataforma DotNet sin tener que aprender un nuevo idioma nuevamente. Una forma de verlo es como una inversión de la pirámide de Java. Java puede explicarse como "lenguaje único-único ejecutable (IL) -mucho SO". dot net es "muchos lenguajes, uno ejecutable, un SO" (por supuesto, el bit de un SO es incorrecto ya que tenemos Mono, pero no creo que eso sea lo que Microsoft tenía en mente :-P).
Sí, C # estaba destinado a ser EL lenguaje para DotNet, pero no "EL ÚNICO". Microsoft probablemente esperaba lograr que los programadores de C ++ migren a C # a largo plazo, si no de inmediato. Pero eso no parece estar sucediendo. C ++ sigue siendo el tercer lenguaje más popular. La falta de similitud con un lenguaje y el esfuerzo necesario para portar una aplicación de C ++ a C # ha hecho que la mayoría de los desarrolladores sean reacios. Después de todo, ¿por qué arreglar algo que no está roto? Es por eso que Microsoft ideó C ++ / CLI. Es una forma maravillosa de obtener programadores de C ++ en el vagón DotNet sin tener que aprender un nuevo lenguaje. Me tomó muy poco tiempo acostumbrarme a C ++ / CLI. El único inconveniente que vi fue que la nueva notación de puntero para las clases administradas puede confundir a aquellos que tienen una comprensión débil de los punteros en C ++. Aunque no me afectó.