CA1047: Declareer geen beschermde leden in verzegelde typen

Eigenschap Waarde
Regel-id CA1047
Titel Geen beveiligde leden declareren in verzegelde typen
Categorie Ontwerpen
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Als suggestie
Toepasselijke talen C# en Visual Basic

Oorzaak

Een openbaar type is sealed (NotInheritable in Visual Basic) en declareert een beveiligd lid of een beveiligd geneste type. Deze regel rapporteert geen schendingen voor Finalize methoden, die dit patroon moeten volgen.

Beschrijving van regel

Typen declareren beveiligde leden, zodat overgenomen typen het lid kunnen openen of overschrijven. Per definitie kunt u niet overnemen van een verzegeld type, wat betekent dat beveiligde methoden voor verzegelde typen niet kunnen worden aangeroepen.

De C#-compiler verzendt waarschuwing CS0628 in plaats van CA1047 voor deze situatie.

Hoe schendingen op te lossen

Als u een schending van deze regel wilt oplossen, wijzig dan het toegangsniveau van het lid naar private, of maak het type erfelijk.

Wanneer waarschuwingen onderdrukken

Een waarschuwing van deze regel niet onderdrukken. Als u het type in de huidige status laat staan, kan dit leiden tot onderhoudsproblemen en biedt dit geen voordelen.

Code configureren om te analyseren

Gebruik de volgende optie om te configureren op welke onderdelen van uw codebase deze regel moet worden uitgevoerd.

U kunt deze optie configureren voor alleen deze regel, voor alle regels waarop deze van toepassing is, of voor alle regels in deze categorie (ontwerp) waarop deze van toepassing is. Zie de configuratieopties voor de codekwaliteitsregel voor meer informatie.

Specifieke API-oppervlakken opnemen

U kunt configureren op welke onderdelen van uw codebase deze regel moet worden uitgevoerd, op basis van hun toegankelijkheid, door de optie api_surface in te stellen. Als u bijvoorbeeld wilt opgeven dat de regel alleen moet worden uitgevoerd op het niet-openbare API-oppervlak, voegt u het volgende sleutel-waardepaar toe aan een .editorconfig-bestand in uw project:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Notitie

Vervang het XXXX deel van CAXXXX door de id van de toepasselijke regel.

Voorbeeld

In het volgende voorbeeld ziet u een type dat deze regel schendt.

public sealed class SealedClass
{
    protected void ProtectedMethod(){}
}
Public NotInheritable Class BadSealedType
    Protected  Sub MyMethod
    End Sub
End Class