Compartilhar via


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.
      }
   }  
}