Что такое атрибут ' CLSCompliant in.NET?

что такое CLSCompliant?

5 ответов


вы отмечаете классы атрибутом CLSCompliant, когда хотите убедиться, что он может использоваться любым другим языком .NET. Вот основные правила:--1-->

  1. неподписанные типы не должны быть частью открытого интерфейса класса. Это означает, что открытые поля не должны иметь неподписанных типов, таких как uint или ulong, открытые методы не должны возвращать неподписанные типы, параметры, переданные в public function, не должны иметь неподписанных типов. Однако unsigned может быть частью частных членов.

  2. небезопасные типы, такие как указатели, не должны использоваться с общедоступными членами. Однако их можно использовать с частными членами.

  3. имена классов и имена членов не должны отличаться только в зависимости от их случая. Например, мы не можем иметь два метода с именами MyMethod и MYMETHOD.

  4. только свойства и методы могут быть перегружены, операторы не должны быть перегружены.


Он сообщает другим потребителям вашего кода, что это совместимым с CLS, а также делает компилятор C#Регистрация что это CLS совместимый для вас.

ссылочная статья содержит гораздо больше деталей о том, что влечет за собой соответствие CLS.


другие ответы правильные. Позвольте мне прояснить некоторые вещи-CLS означает спецификацию общего языка. Это минимальный набор правил и необходимых языковых функций, которые должен реализовать и понять язык .NET. Этот набор является подмножеством общая система типа, который определяет, как определяются типы .Сеть.

быть CLS-совместимым означает, что вы можете написать код, который может использоваться любым языком, который может быть скомпилирован и запущен в среде CLR. Но CLS соответствие не требуется, давая вам гибкость в случаях, когда соответствие CLS было бы трудно или невозможно сделать.

Если вы хотите, чтобы ваш код использовался другими разработчиками, ваш API (ваши открытые классы и методы) должен быть совместим с CLS. Вы должны объявить об этом, добавив CLSCompliantAttribute в свои сборки. Если вы не пишете для других, соответствие CLS не требуется, хотя FxCop (рамки Cop) не согласился бы с мне.

когда ваша сборка отмечена атрибутом CLSCompliantAttribute, компилятор будет (должен!) проверьте свой код, чтобы увидеть, если при компиляции, он будет нарушать любые правила CLS (некоторые из которых ocdecio упомянутый) и сообщить о нарушениях вам для исправления.


CLS совместимый является подмножеством полного спектра языка, разрешенного CLR. Он ограничивает его подмножествами, которые, вероятно, доступны на большинстве языков, предназначенных для среды CLR. Это увеличивает, но не гарантирует, что ваша библиотека может использоваться всеми языками, предназначенными для среды CLR.


как это подходит здесь: чтобы отметить весь проект CLS совместимый добавьте эту строку в AssemblyInfo.cs (можно найти в разделе свойства в обозревателе решений)

[assembly:CLSCompliant(true)]

или эквивалентно в VB.NET (AssemblyInfo.vb скрыто под моим проектом)

<Assembly: CLSCompliant(True)>

спасибо сделать ваш код CLS совместимым.