Ale to chyba nie jest konkretnie zaleta C#, tylko samej specyfikacji CLS...
nie wszystkie z wymienionych rzeczy przynależą do CLS.
na przykład:
- CLS przewiduje propercje w postaci metod get_XXX, set_XXX, a C# ma propercje takie jakie ma (czyli 1st class, a nie przez metody).
- CLS nie przewiduje extension methods
- CLS nie przewiduje partial classes
- interfejsy CLS nie przewidują możliwości specyfikowania indekserów, w C# można (to z uwagi na sposób implementacji indekserów)
itd, itp.
oczywiście jest tak że CLS jest dobrą platformą porozumienia odległych od siebie języków, ale nie należy zapominać że natury programowania obiektowego, funkcjonalnego i deklaratywnego są od siebie mocno odległe. mimo to CLR jest wystarczająco pojemny żeby wszystkie te paradygmaty pomieścić.
poza tym jeszcze jedno - CLS to tylko zbiór ogólnych wytycznych zapewniających
współpracę jezyków. nikt nikomu nie broni zaprojektować języka niezgodnego z CLS, a mimo to kompilowalnego do CLR. przykładem Sml.NET, który nawet miał własną implementację string, niekompatybilną z .NETową, bo chciano zachować semantykę stringów funkcjonalnych.