CA1047: Deklarera inte skyddade medlemmar i förseglade typer
Property | Värde |
---|---|
Regel-ID | CA1047 |
Title | Deklarera inte skyddade medlemmar i förseglade typer |
Kategori | Designa |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
En offentlig typ är sealed
(NotInheritable
i Visual Basic) och deklarerar en skyddad medlem eller en skyddad kapslad typ. Den här regeln rapporterar inte överträdelser för Finalize metoder som måste följa det här mönstret.
Regelbeskrivning
Typer deklarerar skyddade medlemmar så att ärvande typer kan komma åt eller åsidosätta medlemmen. Per definition kan du inte ärva från en förseglad typ, vilket innebär att skyddade metoder för förseglade typer inte kan anropas.
C#-kompilatorn genererar varnings-CS0628 i stället för CA1047 för den här situationen.
Så här åtgärdar du överträdelser
Om du vill åtgärda ett brott mot den här regeln ändrar du åtkomstnivån för medlemmen till privat eller gör typen ärverbar.
När du ska ignorera varningar
Ignorera inte en varning från den här regeln. Om du lämnar typen i det aktuella tillståndet kan det orsaka underhållsproblem och ger inga fördelar.
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 en typ som bryter mot den här regeln.
public sealed class SealedClass
{
protected void ProtectedMethod(){}
}
Public NotInheritable Class BadSealedType
Protected Sub MyMethod
End Sub
End Class