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


Відповіді:


181

Ви позначаєте класи CLSCompliantатрибутом, коли хочете переконатися, що він може бути використаний будь-якою іншою мовою .NET.
Це основні правила:

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

  2. Небезпечні типи, як вказівники, не повинні використовуватися з publicчленами. Однак їх можна використовувати з privateчленами.

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

  4. Перевантажувати можуть лише властивості та методи, оператори не повинні перевантажуватися.


Ви б робили це за замовчуванням для кожного проекту?
Naeem Sarfraz

3
Не обов'язково, в основному для тих, хто може зазнати інших мов .net.
Otávio Décio

1
Ще одне обмеження - CS3006: Перевантажений метод "Foo.Bar (ref Baz)", що відрізняється лише заборгуванням чи вивільненням чи рейтингом масиву, не відповідає сумісності CLS
Дрю Ноакс

Ще одне: публічні ідентифікатори не повинні починатися з символу підкреслення.
Кроно

44

Він повідомляє іншим споживачам вашого коду, що він сумісний із CLS , а також змушує компілятор C # перевірити , чи відповідає він CLS для вас.

Стаття, що посилається, містить набагато більше деталей про те, що тягне за собою відповідність CLS.


12
Отже, якщо я додаю атрибут і потім будую мій проект без скарг, це означає, що мій проект відповідає CLS і все добре?
Свиш

@Svish, так, це так. Компілятор повідомить вас про порушення будь-яких правил.
Дрю Ноакс

41

Інші відповіді правильні. Дозвольте мені уточнити деякі речі - CLS означає "Загальну специфікацію мови". Це мінімальний набір правил та необхідних мовних функцій, які мова .NET повинна впроваджувати та розуміти. Цей набір є підмножиною системи загального типу , яка визначає, як визначаються типи в .NET.

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

Якщо ви плануєте використовувати свій код іншими розробниками, ваш API (ваші загальнодоступні класи та методи) повинен відповідати CLS. Ви повинні заявити про це, додавши CLSCompliantAttribute до своїх зборів. Якщо ви не пишете для інших, відповідність CLS не потрібна, хоча FxCop ( Framework Cop) не погодиться зі мною.

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


FxCop привів мене сюди.
Теоман шипахі

На жаль, велике бачення CLR, що має безліч різних мов інтерфейсу (наприклад, VB.NET - який гине повільною смертю) та інших, як зараз, таких як MC ++, Delphi.NET, Oxygene, J #, JScript.NET тощо), обмеження переваги від завершення відповідності CLSC, враховуючи те, що інші мови, що підтримують CLR, не мають проблем із підтримкою функцій, що не відповідають стандартам CLSC, як-от необов'язкові параметри та outпараметри - тому я думаю, що Microsoft потребує перегляду вимог CLS та, можливо, їх ослаблення.
Дай

13

Відповідність CLS - це підмножина повного мовного спектру, дозволеного CLR. Це обмежує його підмножинами, які, ймовірно, доступні більшістю мов, націлених на CLR. Це збільшує, але не гарантує, що Вашою бібліотекою можуть користуватися всі мови, націлені на CLR.


8

Як тут підходить: Щоб позначити цілий проект, сумісний із CLS, додайте цей рядок AssemblyInfo.cs(можна знайти у розділі Властивості в Провіднику рішень)

[assembly:CLSCompliant(true)]

або аналогічно у VB.NET ( AssemblyInfo.vbприховано під Моїм проектом)

<Assembly: CLSCompliant(True)>

Завдяки тому, що ваш код CLS відповідає .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.