Мои два цента о соответствии CLS
Языки .net - это эволюция языков, которые существовали на момент создания. Языки были созданы таким образом, чтобы вы могли легко преобразовать базовые проекты в проекты .Net без особых усилий по разработке. Из-за огромных различий между языками необходимо было договориться, чтобы языки разговаривали друг с другом. Возьмите примеры языка ниже:
VB.Net - это язык, производный от более раннего языка VB6. Предполагается, что он очень похож по стилю на VB6 и поэтому использует много соглашений, используемых VB6. Поскольку предполагалось, что VB6 будет простым в освоении / использовании не разработчиками, у него есть определенные характеристики, которые делают его более идиотским доказательством. Динамическая типизация, регистронезависимость - вот две вещи.
C # .Net / C ++. Net являются производными от более дружественного для программиста C ++. Поскольку они являются эволюцией этого языка, в нем есть вещи, которые C ++ позволит вам сделать. Чувствительность к регистру, статическая типизация и т. Д.
Теперь, столкнувшись с двумя разными языками, которые они хотели сделать совместимыми, Microsoft сделала единственную разумную вещь. Они наложили ограничения на то, как эти два языка могут взаимодействовать друг с другом посредством использования в основном контракта на программное обеспечение. Этот код может использоваться только таким образом из-за различий в языках.
Например, возьмите код VB.Net, вызывающий код C #
Если бы код C # имел две функции, которые различались только в случае, X () и x (), VB.net никогда бы не смог правильно вызвать этот код, так как он не учитывает регистр. Соблюдение CLS должно сделать это незаконным. Если вы посмотрите на другие правила, они в основном делают то же самое для других языковых функций между разными языками.