Was sind die erweiterten Regeln für Ihren Code benötigt CLS-Beschwerde zu werden?
-
22-07-2019 - |
Frage
Hier ist ein konkretes Beispiel, die nach VS.NET 2005 nicht CLS-Beschwerde ist.
Public Interface IDbId
Function GetNativeObject() As Object
Function Equals(ByVal compObj As IDbId) As Boolean
Function CompareTo(ByVal compObj As IDbId) As Integer
Function ToString() As String
End Interface
Dies ist eine Schnittstelle I mit Klassen implementieren, wie DbId32, DbId64, DbIdString, etc. Es ist eine Möglichkeit, zu abstrahieren dem native Datenbank Primärschlüssel Typ in einen gemeinsamen .NET-Typen.
Was ich nicht die Anzeige ist die Factory-Methode, die (für einen SQL Server-Typen ‚int‘, also beispielsweise neue DbId32) gegeben ein native Datenbanktyp des richtigen Betontyp instanziiert.
Lassen Sie uns jetzt sagen, dass ich wie so diese Schnittstelle verwenden gehen:
Public MustOverride ReadOnly Property ID() As IDbId
VS jetzt gibt diese Warnmeldung:
Rückgabetyp der Funktion 'ID' ist nicht CLS-Beschwerde.
ich diese Warnungen stoppen kann durch Hinzufügen dieses Attribut auf meine Schnittstelle wie folgt:
<CLSCompliant(True)> _
Public Interface IDbId
...
Keine der Funktionen Diese Schnittstelle definiert scheinen die Regeln dokumentiert hier . Also, warum ist diese Warnungen VS angezeigt wird?
Lösung
Ich denke, es ist an dem Mustoverride Stichwort Modifikator in Ihrem Beispiel fällig. Check this out: Nicht-CLS-kompatibel ‚Mustoverride‘ Mitglied ist nicht in einer CLS-konformen Klasse erlaubt
Andere Tipps
Ich betreiben FXCop und das scheint immer darauf hinweisen, was es dauert eine dll CLS-konform
machenNET Reflector Verwenden Sie einen Blick auf den generierten Code nehmen sowohl mit als auch ohne das Attribut, und sehen, ob es einen Unterschied ist.
Wenn ja, und es erklärt nicht offensichtlich die Unterschiede (dh, wenn der einzige Unterschied das CLICompliant Attribut ist), dann wird Ihre Fragen mit den Ergebnissen ändern, und ich werde Ergebnis wieder ...:)