Implementar construtores de exceção padrão
TypeName |
ImplementStandardExceptionConstructors |
CheckId |
CA1032 |
Category (Categoria) |
Microsoft.Design |
Quebrando alterar |
Não separável |
Causa
Um tipo estende System.Exception e não declara todos os construtores.
Descrição da regra
Tipos de exceção devem implementar os construtores seguintes:
NewException() pública
NewException(string) pública
pública NewException (seq_caracteres, exceção)
NewException protegida ou particular (SerializationInfo, StreamingContext)
Caso o conjunto completo de construtores pode tornar difícil lidar corretamente com exceções.Por exemplo, o construtor com a assinatura NewException(string, Exception) é usado para criar exceções causadas por outras exceções. Sem esse construtor, não é possível criar e lançar uma instância de sua exceção personalizada que contenha uma exceção interna (aninhada), que é o que o código gerenciado deve fazer nessa situação.Os construtores de três exceção primeiro são públicos por convenção.O quarto construtor protegido sem lacre classes, e particular nas classes seladas.Para mais informações, consulte: Implementar construtores de serialização.
Como corrigir violações
Para corrigir uma violação dessa regra, adicione os construtores ausentes para a exceção e garantir que eles tenham a acessibilidade correta.
Quando suprimir avisos
É seguro eliminar um aviso da regra que a violação é causada por 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 violam essa 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.
}
}
}