Я получаю, что в общедоступных интерфейсах и методах будут использоваться типы .NET-совместимых типов, чтобы языки .NET могли хорошо сочетаться (например, «System.String», а не «строка» C#).
Это на самом деле не проблема. Использование C# string
приведет к тому, что будет точно таким же CIL с использованием System.String
.
Когда и как действует коэффициент соответствия CLS?
Некоторые языки не поддерживают все типы, поэтому требуется соблюдение CLS, если вы хотите, чтобы поддерживать систему типа, которая собирается работать в чисто всех языках. Это означает, что ushort
(10) не гарантируется для использования на всех языках .NET, поэтому вам следует избегать раскрытия его в открытом виде, если вы хотите быть совместимым с CLS.
Существуют другие правила, которые необходимо соблюдать для соблюдения CLS, например, не различать членов только в каждом конкретном случае, поскольку некоторые языки не чувствительны к регистру. Требования типа являются лишь одним из многих требований для полного соответствия CLS.
Основная проблема заключается в том, что общие языки .NET (такие как C#) позволяют использовать многие типы, имена и методы, которые не гарантируются для всех языков, совместимых со стандартом CLS. C# является более гибким, чем это язык должен соответствовать требованиям CLS. Это означает, что, когда вы используете C# для написания кода, если вы хотите, чтобы этот код можно было использовать на всех языках, совместимых с CLS, вам необходимо ограничить то, что вы публикуете в публичных API.
Хорошо, но System.UInt16 - это .Net-тип, так что, конечно, все языки .NET должны его поддерживать? – IamIC
@IanC Nope. В общем, большинство языков .NET поддерживают намного больше, чем требования CLS, но вы можете написать язык, полностью совместимый с CLS, который не поддерживает UInt16. –
Я отредактировал ошибку «ushort», спасибо. – IamIC