CA1012: Abstracte typen mogen geen openbare constructors hebben
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1012 |
Titel | Abstracte typen mogen geen openbare constructors hebben |
Categorie | Ontwerpen |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Een type is abstract en heeft een openbare constructor.
Deze regel kijkt standaard alleen naar extern zichtbare typen, maar dit kan worden geconfigureerd.
Beschrijving van regel
Constructors voor abstracte typen kunnen alleen worden aangeroepen door afgeleide typen. Omdat openbare constructors exemplaren van een type maken en u geen exemplaren van een abstract type kunt maken, is een abstract type met een openbare constructor onjuist ontworpen.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen, moet u de constructor beveiligen of het type niet declareren als abstract.
Wanneer waarschuwingen onderdrukken
Een waarschuwing van deze regel niet onderdrukken. Het abstracte type heeft een openbare constructor.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1012
// The code that's violating the rule is on this line.
#pragma warning restore CA1012
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1012.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
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
Het volgende codefragment bevat een abstract type dat deze regel schendt.
' Violates this rule
Public MustInherit Class Book
Public Sub New()
End Sub
End Class
// Violates this rule
public abstract class Book
{
public Book()
{
}
}
Met het volgende codefragment wordt de vorige schending opgelost door de toegankelijkheid van de constructor te protected
wijzigen in public
.
// Does not violate this rule
public abstract class Book
{
protected Book()
{
}
}
' Violates this rule
Public MustInherit Class Book
Protected Sub New()
End Sub
End Class