Каков CLSCompliant
атрибут?
Каков CLSCompliant
атрибут?
Ответы:
Вы помечаете классы CLSCompliant
атрибутом, когда хотите убедиться, что он может использоваться любым другим языком .NET.
Это основные правила:
Типы без знака не должны быть частью открытого интерфейса класса. Это означает, что открытые поля не должны иметь неподписанные типы, такие как uint
или ulong
, публичные методы не должны возвращать неподписанные типы, параметры, передаваемые в открытую функцию, не должны иметь неподписанные типы. Однако неподписанные типы могут быть частными членами.
Небезопасные типы, такие как указатели, не должны использоваться с public
членами. Однако они могут быть использованы с private
членами.
Имена классов и имена членов не должны отличаться только в зависимости от их регистра. Например, у нас не может быть двух названных методов MyMethod
и MYMETHOD
.
Только свойства и методы могут быть перегружены, операторы не должны быть перегружены.
Он сообщает другим пользователям вашего кода, что он совместим с CLS , а также заставляет компилятор C # проверить, что он совместим с CLS для вас.
Ссылочная статья содержит гораздо больше подробностей о том, что влечет за собой соответствие CLS.
Другие ответы верны. Позвольте мне уточнить некоторые вещи - CLS расшифровывается как Common Language Specification. Это минимальный набор правил и требуемых языковых функций, которые должен реализовывать и понимать язык .NET. Этот набор является подмножеством системы общих типов , которая определяет, как типы определяются в .NET.
Совместимость с CLS означает, что вы можете писать код, который может использоваться любым языком, который можно скомпилировать и запустить на CLR. Но соответствие CLS не требуется, что дает вам гибкость в тех случаях, когда соответствие CLS будет трудно или невозможно сделать.
Если вы хотите, чтобы ваш код использовался другими разработчиками, ваш API (ваши общедоступные классы и методы) должны быть совместимы с CLS. Вы должны заявить об этом, добавив CLSCompliantAttribute в свои сборки. Если вы пишете не для других, соответствие CLS не требуется, хотя FxCop ( Framework Cop) не согласится со мной.
Когда ваша сборка помечена с помощью CLSCompliantAttribute, компилятор (должен!) Проверит ваш код, чтобы выяснить, не нарушит ли он при компиляции какое-либо из правил CLS (некоторые из которых упоминалось в ocdecio ), и сообщит вам о нарушениях для исправления.
out
параметры - поэтому я думаю, что Microsoft необходимо пересмотреть требования CLS и, возможно, ослабить их.
CLS-совместимый является подмножеством полного языкового спектра, разрешенного CLR. Он ограничивается подмножествами, которые, вероятно, доступны большинству языков, нацеленных на CLR. Это увеличивает, но не гарантирует, что ваша библиотека может использоваться всеми языками, ориентированными на CLR.
Как это подходит здесь: Чтобы отметить весь проект, совместимый с CLS, добавьте эту строку AssemblyInfo.cs
(можно найти в разделе «Свойства» в обозревателе решений).
[assembly:CLSCompliant(true)]
или аналогично в VB.NET ( AssemblyInfo.vb
скрыто в Моем проекте)
<Assembly: CLSCompliant(True)>
Благодаря тому, что ваш код совместим с CLS .