.NETの「CLSCompliant」属性とは何ですか?


回答:


181

CLSCompliant他の.NET言語で使用できることを確認したい場合は、属性にクラスをマークします。
これらは基本的なルールです:

  1. 符号なしの型は、クラスのパブリックインターフェイスの一部であってはなりません。これが意味することは、公共のフィールドは、符号なしのようなタイプの持つべきではないですuintか、ulongパブリックメソッドは、符号なしの型を返すべきではありませんが、パブリック関数に渡されたパラメータが符号なしの型を持つべきではありません。ただし、符号なし型はプライベートメンバーの一部になることができます。

  2. ポインターのような安全でない型は、publicメンバーでは使用しないでください。ただし、privateメンバーと一緒に使用できます。

  3. クラス名とメンバー名は、それらの大文字小文字のみに基づいて異なるべきではありません。たとえばMyMethod、およびという名前の2つのメソッドを持つことはできませんMYMETHOD

  4. オーバーロードできるのはプロパティとメソッドのみで、演算子はオーバーロードしないでください。


それをすべてのプロジェクトのデフォルトとして実行しますか?
Naeem Sarfraz、2010

3
必ずしもそうとは限りませんが、ほとんどの場合、他の.net言語にさらされている可能性があります。
のOtavioDécio

1
もう1つの制限はCS3006
Drew Noakes

もう1つ:公開識別子はアンダースコア文字で始めないでください。
Crono

44

コードの他のコンシューマーにCLS準拠であることを通知し、C#コンパイラーがCLS準拠であることも確認します。

参照された記事には、CLSコンプライアンスに伴う詳細についての詳細が含まれています。


12
したがって、属性を追加してプロジェクトをビルドしても問題は発生しません。つまり、プロジェクトはCLSに準拠しており、すべて問題ありません。
Svish

@Svish、そうです。コンパイラーは、ルールに違反しているかどうかを通知します。
Drew Noakes

41

他の答えは正しいです。いくつかはっきりさせておきましょう。CLSはCommon Language Specificationの略です。これは、.NET言語が実装して理解する必要のある最小限のルールセットと必要な言語機能です。このセットは、.NETでの型の定義方法を定義する一般的な型システムのサブセットです。

CLSに準拠しているということは、CLRでコンパイルおよび実行できる任意の言語で使用できるコードを記述できることを意味します。ただし、CLSへの準拠は必須ではないため、CLSへの準拠が困難または不可能な場合に柔軟に対応できます。

コードを他の開発者が使用する場合は、API(パブリッククラスとメソッド)がCLSに準拠している必要があります。CLSCompliantAttributeをアセンブリに追加して、これを宣言する必要があります。FxCopFramework Cop)は私に同意しませんが、他の人のために書いていない場合、CLSに準拠する必要はありません。

アセンブリがCLSCompliantAttributeでマークされている場合、コンパイラはコードをチェックして(コンパイルする必要があります)、コンパイル時にCLSルール(ocdecioの一部が言及されている)に違反していないかどうかを確認し、違反を修正するように報告します。


FxCopが私をここに連れてきました。
テオマンシパヒ

残念ながら、CLRのグランドビジョンには、さまざまなフロントエンド言語(VB.NETなど-遅い死を招く)と、MC ++、Delphi.NET、Oxygene、J#、JScript.NETなどの制限がなくなりました。 CLRをサポートする他の残りの言語はオプションのパラメーターやoutパラメーターなどのCLSCompliant以外の機能を問題なくサポートしているので、CLSComplianceを完了することの利点-したがって、マイクロソフトはCLSの要件を再検討し、おそらくそれらを緩める必要があると思います。
Dai

13

CLS準拠は、CLRによって許可される完全な言語スペクトルのサブセットです。これは、CLRを対象とする大部分の言語で利用できると思われるサブセットに制限されます。これは増加しますが、CLRを対象とするすべての言語でライブラリを使用できることは保証されません。


8

ここに収まるように:プロジェクト全体をCLS準拠としてマークするには、次の行を追加AssemblyInfo.csします(ソリューションエクスプローラーの[プロパティ]にあります)

[assembly:CLSCompliant(true)]

または同等のVB.NET(AssemblyInfo.vbMy Projectの下に非表示)

<Assembly: CLSCompliant(True)>

コードをCLSに準拠させていただきありがとうございます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.