CLSCompliantAttribute

CLSCompliantAttribute

# Modificatore di accesso a cui si applicano le regole 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;
        }

    }
}

Le regole per la conformità al CLS si applicano solo a componenti pubblici/protetti.

# Violazione della regola CLS:tipi/sbyte non firmati

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;


    }
}

# Violazione della regola CLS:stessa denominazione

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 non fa distinzione tra maiuscole e minuscole

# Violazione della regola CLS:identificatore _

using System;

[assembly:CLSCompliant(true)]
namespace CLSDoc
{
   
    public class Car
    {
        //Warning CS3008  Identifier '_age' is not CLS-complian    
        public int _age = 0;    
    }

}

Non puoi iniziare la variabile con _

# Violazione della regola CLS:eredita dalla classe non 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
    {
    }

}

# Sintassi

  1. [assembly:CLSCompliant(true)]
  2. [CLSCompliant(true)]

# parametri

Costruttore Parametro
CLSCompliantAttribute(Boolean) Inizializza un'istanza della classe CLSCompliantAttribute con un valore booleano che indica se l'elemento del programma indicato è conforme a CLS.

# Osservazioni

La Common Language Specification (CLS) è un insieme di regole di base a cui qualsiasi lingua destinata alla CLI (lingua che conferma le specifiche di Common Language Infrastructure) deve confermare per poter interoperare con altre lingue conformi a CLS.

Elenco delle lingue CLI

È necessario contrassegnare l'assembly come CLSCompliant nella maggior parte dei casi durante la distribuzione di librerie. Questo attributo ti garantirà che il tuo codice sarà utilizzabile da tutte le lingue conformi a CLS. Ciò significa che il tuo codice può essere utilizzato da qualsiasi linguaggio che può essere compilato ed eseguito su CLR(Common Language Runtime)

Quando il tuo assieme è contrassegnato con CLSCompliantAttribute , il compilatore verificherà se il tuo codice viola una qualsiasi delle regole CLS e restituirà un avviso se è necessario.