C# Language
CLSCompliantAttribute
Buscar..
Sintaxis
- [ensamblado: CLSCompliant (verdadero)]
- [CLSCompleta (verdadero)]
Parámetros
Constructor | Parámetro |
---|---|
CLSCompliantAttribute (booleano) | Inicializa una instancia de la clase CLSCompliantAttribute con un valor booleano que indica si el elemento del programa indicado es compatible con CLS. |
Observaciones
La especificación de lenguaje común (CLS) es un conjunto de reglas básicas a las que cualquier idioma que se dirige a la CLI (idioma que confirma las especificaciones de la infraestructura de lenguaje común) debe confirmar para interoperar con otros idiomas compatibles con CLS.
Debe marcar su ensamblaje como CLSC Compliant en la mayoría de los casos cuando distribuye bibliotecas. Este atributo le garantizará que su código será utilizable por todos los idiomas compatibles con CLS. Esto significa que su código puede ser consumido por cualquier idioma que pueda compilarse y ejecutarse en CLR ( Common Language Runtime )
Cuando su ensamblaje está marcado con CLSCompliantAttribute
, el compilador verificará si su código viola cualquiera de las reglas de CLS y devolverá una advertencia si es necesario.
Modificador de acceso al que se aplican las reglas de 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;
}
}
}
Las reglas para el cumplimiento de CLS se aplican solo a componentes públicos / protegidos.
Violación de la regla CLS: tipos sin firmar / 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;
}
}
Violación de la regla CLS: misma denominación
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 no distingue entre mayúsculas y minúsculas
Violación de la regla CLS: Identificador _
using System;
[assembly:CLSCompliant(true)]
namespace CLSDoc
{
public class Car
{
//Warning CS3008 Identifier '_age' is not CLS-complian
public int _age = 0;
}
}
No se puede iniciar variable con _
Violación de la regla CLS: Heredar de una clase que no sea 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
{
}
}