C# Language
CLSCompliantAttribute
Suche…
Syntax
- [Assembly: CLSCompliant (true)]
- [CLSCompliant (true)]
Parameter
Konstrukteur | Parameter |
---|---|
CLSCompliantAttribute (Boolean) | Initialisiert eine Instanz der CLSCompliantAttribute-Klasse mit einem booleschen Wert, der angibt, ob das angegebene Programmelement CLS-kompatibel ist. |
Bemerkungen
Die Common Language Specification (CLS) ist eine Reihe von Basisregeln, die alle Sprachen, die auf die CLI abzielen (Sprache, die die Spezifikationen der Common Language Infrastructure bestätigt), bestätigen sollten, um mit anderen CLS-kompatiblen Sprachen zusammenzuarbeiten.
In den meisten Fällen sollten Sie Ihre Assembly als CLSCompliant kennzeichnen, wenn Sie Bibliotheken verteilen. Dieses Attribut garantiert Ihnen, dass Ihr Code von allen CLS-kompatiblen Sprachen verwendet werden kann. Das bedeutet, dass Ihr Code von jeder Sprache verwendet werden kann, die kompiliert und unter CLR ( Common Language Runtime ) ausgeführt werden kann.
Wenn Ihre Assembly mit CLSCompliantAttribute
markiert CLSCompliantAttribute
, überprüft der Compiler, ob Ihr Code gegen eine der CLS-Regeln verstößt, und gibt bei Bedarf eine Warnung aus .
Zugriffsmodifizierer, für den CLS-Regeln gelten
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;
}
}
}
Die Regeln für die CLS-Konformität gelten nur für öffentliche / geschützte Komponenten.
Verletzung der CLS-Regel: Vorzeichenlose Typen / 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;
}
}
Verletzung der CLS-Regel: Gleiche Benennung
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 unterscheidet nicht zwischen Groß- und Kleinschreibung
Verletzung der CLS-Regel: Kennung _
using System;
[assembly:CLSCompliant(true)]
namespace CLSDoc
{
public class Car
{
//Warning CS3008 Identifier '_age' is not CLS-complian
public int _age = 0;
}
}
Sie können die Variable nicht mit _ starten.
Verletzung der CLS-Regel: Erbt von der Klasse 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
{
}
}