Що таке CLSCompliant
атрибут?
Що таке CLSCompliant
атрибут?
Відповіді:
Ви позначаєте класи CLSCompliant
атрибутом, коли хочете переконатися, що він може бути використаний будь-якою іншою мовою .NET.
Це основні правила:
Непідписані типи не повинні бути частиною загальнодоступного інтерфейсу класу. Що означає це, що загальнодоступні поля не повинні мати типи без підпису, uint
або ulong
, публічні методи не повинні повертати неподписані типи, параметри, передані в загальнодоступну функцію, не повинні мати типи без підпису. Однак неподписані типи можуть входити до приватних членів.
Небезпечні типи, як вказівники, не повинні використовуватися з public
членами. Однак їх можна використовувати з private
членами.
Назви класів та назви членів не повинні відрізнятися лише залежно від їх випадку. Наприклад, у нас не може бути двох методів, названих MyMethod
і MYMETHOD
.
Перевантажувати можуть лише властивості та методи, оператори не повинні перевантажуватися.
Він повідомляє іншим споживачам вашого коду, що він сумісний із CLS , а також змушує компілятор C # перевірити , чи відповідає він CLS для вас.
Стаття, що посилається, містить набагато більше деталей про те, що тягне за собою відповідність CLS.
Інші відповіді правильні. Дозвольте мені уточнити деякі речі - CLS означає "Загальну специфікацію мови". Це мінімальний набір правил та необхідних мовних функцій, які мова .NET повинна впроваджувати та розуміти. Цей набір є підмножиною системи загального типу , яка визначає, як визначаються типи в .NET.
Бути сумісним із CLS означає, що ви можете писати код, який можна споживати будь-якою мовою, яка може бути складена та запущена в CLR. Але дотримання CLS не потрібно, що дає вам гнучкість у випадках, коли відповідність CLS важко чи неможливо зробити.
Якщо ви плануєте використовувати свій код іншими розробниками, ваш API (ваші загальнодоступні класи та методи) повинен відповідати CLS. Ви повинні заявити про це, додавши CLSCompliantAttribute до своїх зборів. Якщо ви не пишете для інших, відповідність CLS не потрібна, хоча FxCop ( Framework Cop) не погодиться зі мною.
Коли ваша збірка позначена CLSCompliantAttribute, компілятор перевірить ваш код, щоб побачити, чи при його компіляції він порушить будь-яке з правил CLS (деякі з яких ocdecio згадував) і повідомить про порушення для його виправлення.
out
параметри - тому я думаю, що Microsoft потребує перегляду вимог CLS та, можливо, їх ослаблення.
Як тут підходить: Щоб позначити цілий проект, сумісний із CLS, додайте цей рядок AssemblyInfo.cs
(можна знайти у розділі Властивості в Провіднику рішень)
[assembly:CLSCompliant(true)]
або аналогічно у VB.NET ( AssemblyInfo.vb
приховано під Моїм проектом)
<Assembly: CLSCompliant(True)>
Завдяки тому, що ваш код CLS відповідає .