C# Language
CLSCompliantAttribute
サーチ…
構文
- [アセンブリ:CLSCompliant(true)]
- [CLSCompliant(true)]
パラメーター
コンストラクタ | パラメータ |
---|---|
CLSCompliantAttribute(ブール値) | CLSCompliantAttributeクラスのインスタンスを、指定されたプログラム要素がCLSに準拠しているかどうかを示すブール値で初期化します。 |
備考
CLS(Common Language Specification)は、CLIをターゲットとする言語(共通言語インフラストラクチャの仕様を確認する言語)が他のCLS準拠言語と相互運用するために確認する基本ルールのセットです。
ライブラリを配布する場合、ほとんどの場合、アセンブリをCLSCompliantとしてマークする必要があります。この属性は、すべてのCLS準拠言語でコードを使用できることを保証します。これは、CLR( Common Language Runtime )でコンパイルして実行できる言語でコードを使用できることを意味します。
アセンブリにCLSCompliantAttribute
が設定されてCLSCompliantAttribute
場合、コンパイラはコードがCLSルールに違反していないかどうかをチェックし、必要に応じて警告を返します。
CLS規則が適用されるアクセス修飾子
using System;
[assembly:CLSCompliant(true)]
namespace CLSDoc
{
public class Cat
{
internal UInt16 _age = 0;
private UInt16 _daysTillVacination = 0;
//Warning CS3003 Type of 'Cat.DaysTillVacination' is not CLS-compliant
protected UInt16 DaysTillVacination
{
get { return _daysTillVacination; }
}
//Warning CS3003 Type of 'Cat.Age' is not CLS-compliant
public UInt16 Age
{ get { return _age; } }
//valid behaviour by CLS-compliant rules
public int IncreaseAge()
{
int increasedAge = (int)_age + 1;
return increasedAge;
}
}
}
CLS準拠のルールは、パブリック/保護されたコンポーネントにのみ適用されます。
CLSルールの違反:符号なしタイプ/ sbyte
using System;
[assembly:CLSCompliant(true)]
namespace CLSDoc
{
public class Car
{
internal UInt16 _yearOfCreation = 0;
//Warning CS3008 Identifier '_numberOfDoors' is not CLS-compliant
//Warning CS3003 Type of 'Car._numberOfDoors' is not CLS-compliant
public UInt32 _numberOfDoors = 0;
//Warning CS3003 Type of 'Car.YearOfCreation' is not CLS-compliant
public UInt16 YearOfCreation
{
get { return _yearOfCreation; }
}
//Warning CS3002 Return type of 'Car.CalculateDistance()' is not CLS-compliant
public UInt64 CalculateDistance()
{
return 0;
}
//Warning CS3002 Return type of 'Car.TestDummyUnsignedPointerMethod()' is not CLS-compliant
public UIntPtr TestDummyUnsignedPointerMethod()
{
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
UIntPtr ptr = (UIntPtr)arr[0];
return ptr;
}
//Warning CS3003 Type of 'Car.age' is not CLS-compliant
public sbyte age = 120;
}
}
CLSルールの違反:同じ命名
using System;
[assembly:CLSCompliant(true)]
namespace CLSDoc
{
public class Car
{
//Warning CS3005 Identifier 'Car.CALCULATEAge()' differing only in case is not CLS-compliant
public int CalculateAge()
{
return 0;
}
public int CALCULATEAge()
{
return 0;
}
}
}
Visual Basicは大文字と小文字を区別しない
CLSルール違反:識別子_
using System;
[assembly:CLSCompliant(true)]
namespace CLSDoc
{
public class Car
{
//Warning CS3008 Identifier '_age' is not CLS-complian
public int _age = 0;
}
}
_で変数を開始することはできません
CLSルールの違反:非CLSComplaintクラスからの継承
using System;
[assembly:CLSCompliant(true)]
namespace CLSDoc
{
[CLSCompliant(false)]
public class Animal
{
public int age = 0;
}
//Warning CS3009 'Dog': base type 'Animal' is not CLS-compliant
public class Dog : Animal
{
}
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow