Что такое атрибут CLSCompliant в .NET? - PullRequest
157 голосов
/ 20 февраля 2009

Что такое атрибут CLSCompliant?

Ответы [ 5 ]

164 голосов
/ 20 февраля 2009

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

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

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

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

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

44 голосов
/ 20 февраля 2009

Он сообщает другим пользователям вашего кода, что он CLS-совместим , а также заставляет компилятор C # проверять , что он CLS-совместим для вас.

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

36 голосов
/ 20 февраля 2009

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

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

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

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

13 голосов
/ 20 февраля 2009

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

7 голосов
/ 21 сентября 2015

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

[assembly:CLSCompliant(true)]

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

<Assembly: CLSCompliant(True)>

Благодаря Обеспечение соответствия вашего кода CLS .

...