Compartilhar via


CA1032: Implementar construtores de exceção padrão

TypeName

ImplementStandardExceptionConstructors

CheckId

CA1032

<strong>Categoria</strong>

Microsoft.design

Alteração significativa

Não-separável

Causa

Estende a um tipo de System.Exception e não declara todos os construtores da necessários.

Descrição da regra

Tipos de exceção devem implementar construtores a seguir:

  • NewException() pública

  • NewException(string) pública

  • Public NewException (string, exceção)

  • NewException protegida ou particular (SerializationInfo, StreamingContext)

Falha ao fornecer o conjunto completo de construtores pode tornar difícil tratar corretamente exceções.Por exemplo, o construtor que possui a assinatura NewException(string, Exception) é usado para criar exceções causadas por outras exceções.Sem este construtor não é possível criar e lançar uma instância de sua exceção personalizada que contém a exceção interna (aninhada), que é o que o código gerenciado deve fazer em tal situação.Os construtores de três exceção primeiro são públicos por convenção.O quarto construtor é protegido em classes sem lacre e privado em classes seladas.Para mais informações, consulte: CA2229: Construtores de serialização de implementar.

Como corrigir violações

Para corrigir uma violação desta regra, adicione os construtores faltando à exceção e certifique-se de que eles tenham a acessibilidade correta.

Quando suprimir avisos

É seguro eliminar um aviso esta regra quando a violação é causada pelo uso de 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 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.
      }
   }  
}