2013-05-29 3 views
1

Я что-то пропустил. Я получаю, что в общедоступных интерфейсах и методах будут использоваться типы, совместимые с .NET, так что языки .NET могут хорошо сочетаться (например, «System.String», а не «строка» C#).CLS vs соответствие требованиям .NET: понимание разницы

Если вы используете .NET-совместимые типы, то, безусловно, все языки на основе .NET могут взаимодействовать. Когда и как действует коэффициент соответствия CLS?

Например, System.UInt16 является .NET-совместимым, а не CLR-совместимым и эквивалентным «ushort» в C#.

ответ

1

Я получаю, что в общедоступных интерфейсах и методах будут использоваться типы .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.

+0

Хорошо, но System.UInt16 - это .Net-тип, так что, конечно, все языки .NET должны его поддерживать? – IamIC

+0

@IanC Nope. В общем, большинство языков .NET поддерживают намного больше, чем требования CLS, но вы можете написать язык, полностью совместимый с CLS, который не поддерживает UInt16. –

+0

Я отредактировал ошибку «ushort», спасибо. – IamIC

1

Соответствие CLS является более строгим, чем система общих типов (что означает типы, которые может использовать весь язык .NET).

Одним из примеров является именование - на C# вы можете начать публичное имя участника с _.

Это не соответствует требованиям CLS, так как это не все языки.

+0

Спасибо. Таким образом, это сводится к тому, какие языки будут использовать CLS, но не .Net-типы? – IamIC

+0

@IanC - Не уверен, что я следую. Все языки .NET будут использовать типы .NET, но не все типы поддерживаются всеми .NET-языками. Кроме того, важно именовать. – Oded

+0

Ну, например, кажется, что System.UInt16 не обязательно поддерживается всеми .Net-языками, хотя это базовый .Net-тип. Это верно? – IamIC

1

Если вы используете .NET-совместимые типы, то, безусловно, все языки на основе .NET могут взаимодействовать.

Это совсем не так. Не все языки поддерживают все типы .NET. Например, более ранние версии VB.NET не поддерживали UInt16, UInt32 или UInt64.

Когда и как действует коэффициент соответствия CLS?

ЦБС определяет, среди прочего, типы, языки должны осуществить для того, чтобы взаимодействовать. Все остальные типы являются необязательными.

Смежные вопросы