CA1000: Deklarera inte statiska medlemmar på generiska typer
Property | Värde |
---|---|
Regel-ID | CA1000 |
Title | Deklarera inte statiska medlemmar för generiska typer |
Kategori | Designa |
Korrigeringen är icke-bakåtkompatibel | Brott |
Aktiverad som standard i .NET 9 | Nej |
Orsak
En allmän typ innehåller en static
(Shared
i Visual Basic)-medlem.
Som standard tittar den här regeln bara på externt synliga typer, men det kan konfigureras.
Regelbeskrivning
När en static
medlem av en allmän typ anropas måste typargumentet anges för typen. När en allmän instansmedlem som inte stöder slutsatsdragning anropas måste typargumentet anges för medlemmen. Syntaxen för att ange typargumentet i dessa två fall är annorlunda och lätt att förväxla, som följande anrop visar:
' Shared method in a generic type.
GenericType(Of Integer).SharedMethod()
' Generic instance method that does not support inference.
someObject.GenericMethod(Of Integer)()
// Static method in a generic type.
GenericType<int>.StaticMethod();
// Generic instance method that does not support inference.
someObject.GenericMethod<int>();
I allmänhet bör båda föregående deklarationer undvikas så att typargumentet inte behöver anges när medlemmen anropas. Detta resulterar i en syntax för att anropa medlemmar i generiska objekt som inte skiljer sig från syntaxen för icke-generiska objekt.
Så här åtgärdar du överträdelser
Om du vill åtgärda ett brott mot den här regeln tar du bort den statiska medlemmen eller ändrar den till en instansmedlem.
När du ska ignorera varningar
Ignorera inte en varning från den här regeln. Att tillhandahålla generiska data i en syntax som är lätt att förstå och använda minskar den tid som krävs för att lära sig och ökar implementeringsgraden för nya bibliotek.
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 CA1000
// The code that's violating the rule is on this line.
#pragma warning restore CA1000
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.CA1000.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 den 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
Relaterade regler
- CA1005: Undvik överdrivna parametrar för generiska typer
- CA1010: Samlingar bör implementera generiskt gränssnitt
- CA1002: Exponera inte allmänna listor
- CA1003: Använda allmänna händelsehanterarinstanser