CA1032: Implementujte standardní konstruktory výjimky
Název_typu |
ImplementStandardExceptionConstructors |
CheckId |
CA1032 |
Kategorie |
Microsoft.design |
Změnit rozdělení |
Bez rozdělení |
Příčina
Rozšiřuje typ Exception a nedeklaruje všechny požadované konstruktory.
Popis pravidla
Typy výjimku musí implementovat následující konstruktory:
veřejné NewException()
veřejné NewException(string)
veřejné NewException (řetězec, výjimka)
chráněný nebo soukromý NewException (SerializationInfo, StreamingContext)
Selhání poskytnout úplnou sadu konstruktory mohou ztížit výjimky pracuje správně.Například konstruktor, který má podpis NewException(string, Exception) se používá k vytvoření výjimky, které jsou způsobeny další výjimky.Bez tohoto konstruktoru nelze vytvořit a vyvoláním instanci své vlastní výjimek, který obsahuje vnitřní výjimce (vnořené), které je v takové situaci by měl provést co spravovaný kód.První tři výjimky konstruktory jsou veřejné úmluvou.Čtvrtý konstruktoru je chráněné neuzavřených tříd a soukromé v uzavřených tříd.Další informace získáte v tématu CA2229: Implementovat serializační konstruktory
Jak opravit porušení
Porušení tohoto pravidla, přidat chybějící konstruktory, s výjimkou a ujistěte se, že mají správné usnadnění.
Při potlačení upozornění
Je bezpečné při porušení je způsobeno použitím jiné přístupové úrovně pro veřejné konstruktory potlačí upozornění od tohoto pravidla.
Příklad
Následující příklad obsahuje typ výjimky, který porušuje pravidlo a typ výjimky, která správně implementována.
using System;
using System.Runtime.Serialization;
namespace DesignLibrary
{
// 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.
}
protected GoodException(SerializationInfo info,
StreamingContext context) : base(info, context)
{
// Implement type-specific serialization constructor logic.
}
}
}