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