Share via


CA1040: Undvik tomma gränssnitt

Property Värde
Regel-ID CA1040
Rubrik Undvik tomma gränssnitt
Kategori Designa
Korrigeringen är icke-bakåtkompatibel Bryta
Aktiverad som standard i .NET 8 Nej

Orsak

Gränssnittet deklarerar inga medlemmar eller implementerar två eller flera andra gränssnitt.

Som standard tittar den här regeln bara på externt synliga gränssnitt, men detta kan konfigureras.

Regelbeskrivning

Gränssnitt definierar medlemmar som tillhandahåller ett beteende- eller användningskontrakt. De funktioner som beskrivs av gränssnittet kan användas av vilken typ som helst, oavsett var typen visas i arvshierarkin. En typ implementerar ett gränssnitt genom att tillhandahålla implementeringar för medlemmarna i gränssnittet. Ett tomt gränssnitt definierar inga medlemmar. Därför definierar den inte ett kontrakt som kan implementeras.

Om din design innehåller tomma gränssnitt som typer förväntas implementera använder du förmodligen ett gränssnitt som en markör eller ett sätt att identifiera en grupp med typer. Om den här identifieringen inträffar vid körning är rätt sätt att göra detta att använda ett anpassat attribut. Använd förekomsten eller frånvaron av attributet, eller egenskaperna för attributet, för att identifiera måltyperna. Om identifieringen måste ske vid kompileringstillfället är det acceptabelt att använda ett tomt gränssnitt.

Så här åtgärdar du överträdelser

Ta bort gränssnittet eller lägg till medlemmar i det. Om det tomma gränssnittet används för att märka en uppsättning typer ersätter du gränssnittet med ett anpassat attribut.

När du ska ignorera varningar

Det är säkert att ignorera en varning från den här regeln när gränssnittet används för att identifiera en uppsättning typer vid kompileringstillfället.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable CA1040
// The code that's violating the rule is on this line.
#pragma warning restore CA1040

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.CA1040.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Konfigurera kod för analys

Använd följande alternativ för att konfigurera vilka delar av kodbasen som regeln ska köras på.

Du kan konfigurera det här alternativet för bara den här regeln, för alla regler som gäller för eller för alla regler i den här kategorin (design) som den gäller för. Mer information finns i Konfigurationsalternativ för kodkvalitetsregel.

Inkludera specifika API-ytor

Du kan konfigurera vilka delar av kodbasen som ska köras med den här regeln baserat på deras tillgänglighet. Om du till exempel vill ange att regeln endast ska köras mot den icke-offentliga API-ytan lägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Exempel

I följande exempel visas ett tomt gränssnitt.

// Violates rule
public interface IBadInterface
{
}
' Violates rule
Public Interface IBadInterface
End Interface