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