CA1032: Standaard uitzonderingsconstructors implementeren
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1032 |
Titel | Standaard uitzonderingsconstructors implementeren |
Categorie | Ontwerpen |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Een type breidt uit System.Exception , maar declareert niet alle vereiste constructors.
Beschrijving van regel
Uitzonderingstypen moeten de volgende drie openbare constructors implementeren:
public NewException()
public NewException(string)
public NewException(tekenreeks, uitzondering)
Als u de volledige set constructors niet opgeeft, kan het lastig zijn om uitzonderingen correct af te handelen. De constructor met de handtekening NewException(string, Exception)
wordt bijvoorbeeld gebruikt om uitzonderingen te maken die worden veroorzaakt door andere uitzonderingen. Zonder deze constructor kunt u geen exemplaar van uw aangepaste uitzondering maken en genereren die een interne (geneste) uitzondering bevat. Dit is wat beheerde code in een dergelijke situatie moet doen.
Zie CA22229: Serialisatieconstructors implementeren voor meer informatie.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen, voegt u de ontbrekende constructors toe aan de uitzondering en zorgt u ervoor dat deze over de juiste toegankelijkheid beschikken.
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing van deze regel te onderdrukken wanneer de schending wordt veroorzaakt door gebruik te maken van een ander toegangsniveau voor de openbare constructors.
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 CA1032
// The code that's violating the rule is on this line.
#pragma warning restore CA1032
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.CA1032.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Opmerking
Het volgende voorbeeld bevat een uitzonderingstype dat deze regel schendt en een uitzonderingstype dat correct is geïmplementeerd.
// Violates rule ImplementStandardExceptionConstructors.
public class BadException : Exception
{
public BadException()
{
// Add any type-specific logic, and supply the default message.
}
}
[Serializable()]
public class GoodException : Exception
{
public GoodException()
{
// Add any type-specific logic, and supply the default message.
}
public GoodException(string message) : base(message)
{
// Add any type-specific logic.
}
public GoodException(string message, Exception innerException) :
base(message, innerException)
{
// Add any type-specific logic for inner exceptions.
}
}