CA1040: Leere Schnittstellen vermeiden.
Eigenschaft | Wert |
---|---|
Regel-ID | CA1040 |
Titel | Leere Schnittstellen vermeiden. |
Kategorie | Design |
Fix führt oder führt nicht zur Unterbrechung | Breaking |
Standardmäßig in .NET 8 aktiviert | Nein |
Ursache
Die Schnittstelle deklariert keine Member oder implementiert mindestens zwei andere Schnittstellen.
Standardmäßig werden mit dieser Regel nur extern sichtbare Schnittstellen überprüft, aber dies ist konfigurierbar.
Regelbeschreibung
Schnittstellen definieren Member, die ein Verhalten oder einen Verwendungsvertrag bereitstellen. Die durch die Schnittstelle beschriebene Funktionalität kann von jedem Typ übernommen werden, unabhängig davon, an welcher Stelle der Typ in der Vererbungshierarchie steht. Ein Typ implementiert eine Schnittstelle, indem er Implementierungen für die Member der Schnittstelle bereitstellt. Eine leere Schnittstelle definiert keine Member. Somit definiert sie auch keinen Vertrag, der implementiert werden kann.
Wenn Ihr Design leere Schnittstellen enthält, die von Typen implementiert werden sollen, verwenden Sie wahrscheinlich eine Schnittstelle als Marker oder zur Identifizierung einer Typengruppe. Wenn diese Identifizierung während der Laufzeit erfolgt, muss für die korrekte Ausführung ein benutzerdefiniertes Attribut verwendet werden. Nutzen Sie das Vorhandensein oder das Fehlen des Attributs oder seine Eigenschaften, um die Zieltypen zu identifizieren. Wenn die Identifizierung während der Kompilierzeit erfolgen muss, ist es akzeptabel, eine leere Schnittstelle zu verwenden.
Behandeln von Verstößen
Entfernen Sie die Schnittstelle oder fügen Sie Member hinzu. Wenn die leere Schnittstelle verwendet wird, um eine Anzahl von Typen zu bezeichnen, ersetzen Sie die Schnittstelle durch ein benutzerdefiniertes Attribut.
Wann sollten Warnungen unterdrückt werden?
Es ist sicher, eine Warnung dieser Regel zu unterdrücken, wenn die Schnittstelle zur Identifizierung einer Anzahl von Typen während der Kompilierzeit verwendet wird.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA1040
// The code that's violating the rule is on this line.
#pragma warning restore CA1040
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA1040.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Konfigurieren des zu analysierenden Codes
Mithilfe der folgenden Option können Sie konfigurieren, für welche Teile Ihrer Codebasis diese Regel ausgeführt werden soll.
Sie können diese Optionen nur für diese Regel, für alle zutreffenden Regeln oder für alle zutreffenden Regeln in dieser Kategorie (Entwurf) konfigurieren. Weitere Informationen finden Sie unter Konfigurationsoptionen für die Codequalitätsregel.
Einschließen bestimmter API-Oberflächen
Sie können je nach Zugänglichkeit festlegen, für welche Bestandteile Ihrer Codebasis diese Regel ausgeführt wird. Sie können beispielsweise festlegen, dass die Regel nur für die nicht öffentliche API-Oberfläche ausgeführt werden soll, indem Sie einer EDITORCONFIG-Datei in Ihrem Projekt das folgende Schlüssel-Wert-Paar hinzufügen:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Beispiel
Das folgende Beispiel zeigt eine leere Schnittstelle.
// Violates rule
public interface IBadInterface
{
}
' Violates rule
Public Interface IBadInterface
End Interface