Share via


CA1047: Geen beveiligde leden declareren in verzegelde typen

Eigenschappen Weergegeven als
Regel-id CA1047
Titel Geen beveiligde leden declareren in verzegelde typen
Categorie Ontwerpen
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Als suggestie

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.

Schendingen oplossen

Als u een schending van deze regel wilt oplossen, wijzigt u het toegangsniveau van het lid in privé of maakt u het type overgenomen.

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 instellen op welke onderdelen van uw codebase deze regel moet worden uitgevoerd, op basis van hun toegankelijkheid. 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

Opmerking

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