CA1032: implementar construtores de exceção padrão
TypeName |
ImplementStandardExceptionConstructors |
CheckId |
CA1032 |
Categoria |
Microsoft.Design |
Alteração Significativa |
Sem quebra |
Causa
Um tipo estende Exception e não declara todos os construtores necessários.
Descrição da Regra
Os tipos de exceção devem implementar os seguintes construtores:
NewException()público
NewException utilitário (cadeia de caracteres)
NewException utilitário (cadeia de caracteres, exceção)
NewException protegido ou particular (SerializationInfo, StreamingContext)
A falha ao fornecer o conjunto completo de construtores pode dificultar a tratar exceções corretamente.Por exemplo, o construtor que tem a assinatura NewException(string, Exception) é usado para criar exceções causadas por outras exceções.Sem este construtor você não pode criar e gerar uma instância da exceção personalizada que contém uma exceção aninhada () interna, que é o que o código gerenciado deve fazer nessa situação.Os três primeiros construtores de exceção são públicos por convenção.O quarto construtor é protegido em classes não lacradas, e privada em classes seladas.Para obter mais informações, consulte CA2229: implementar construtores de serialização
Como Corrigir Violações
Para corrigir uma violação desta regra, adicione os construtores ausentes exceto, e certifique-se de que têm acessibilidade correta.
Quando Suprimir Alertas
É seguro suprimir um aviso desta regra quando a violação é causada usando um nível de acesso diferente para os construtores públicos.
Exemplo
O exemplo a seguir contém um tipo de exceção que viola esta regra e um tipo de exceção que é implementado corretamente.
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.
}
}
}