サーチ…


構文

  1. [アセンブリ:CLSCompliant(true)]
  2. [CLSCompliant(true)]

パラメーター

コンストラクタパラメータ
CLSCompliantAttribute(ブール値) CLSCompliantAttributeクラスのインスタンスを、指定されたプログラム要素がCLSに準拠しているかどうかを示すブール値で初期化します。

備考

CLS(Common Language Specification)は、CLIをターゲットとする言語(共通言語インフラストラクチャの仕様を確認する言語)が他のCLS準拠言語と相互運用するために確認する基本ルールのセットです。

CLI言語のリスト

ライブラリを配布する場合、ほとんどの場合、アセンブリを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