CA1032: Implementowanie standardowych konstruktorów wyjątków
TypeName |
ImplementStandardExceptionConstructors |
CheckId |
CA1032 |
Kategoria |
Microsoft.Design |
Złamanie zmiany |
Bez podziału |
Przyczyna
Rozszerza typu Exception i nie zgłoszą wszystkie wymagane konstruktorów.
Opis reguły
Typy wyjątków musi implementować konstruktory następujące:
NewException() publiczne
NewException(string) publiczne
publiczne NewException (ciąg, wyjątek)
NewException chronionych lub prywatnych (SerializationInfo, StreamingContext)
Niemożność pełny zestaw konstruktory może utrudnić poprawnie obsługi wyjątków.Na przykład, podpis ma konstruktora NewException(string, Exception) jest używany do tworzenia wyjątków, które są spowodowane przez inne wyjątki.Bez tego konstruktora nie można utworzyć i throw wystąpienie swoje niestandardowe wyjątek, który zawiera wyjątek wewnętrzny (zagnieżdżonych), który jest kod zarządzany, jakie należy wykonać w takiej sytuacji.Konstruktory wyjątek trzy pierwsze są publiczne przez Konwencję.Czwarty konstruktora jest chronione w niezamkniętych szczelnie klas i prywatnych klas zapieczętowanych.Aby uzyskać więcej informacji zobaczCA2229: Należy zaimplementować konstruktory serializacji
Jak naprawić naruszenia
Aby naprawić naruszenie tej zasady, dodać brakujące konstruktory wyjątek i upewnij się, że poprawne ułatwień dostępu.
Kiedy do pomijania ostrzeżenia
Bezpiecznie Pomiń ostrzeżenie od tej reguły, gdy naruszenie jest spowodowana przy użyciu poziom dostępu dla konstruktorów publicznych.
Przykład
Poniższy przykład zawiera typ wyjątku, który narusza reguły i typ wyjątku, który jest prawidłowo implementowane.
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.
}
}
}