Delen via


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 8 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.

Voorbeeld

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.
    }
}

Zie ook

CA2229: Serialisatieconstructors implementeren