CA1032 : Implémenter des constructeurs d'exception standardCA1032: Implement standard exception constructors

TypeNameTypeName ImplementStandardExceptionConstructorsImplementStandardExceptionConstructors
CheckIdCheckId CA1032CA1032
CategoryCategory Microsoft.DesignMicrosoft.Design
Modification avec ruptureBreaking Change Sans ruptureNon-breaking

CauseCause

Un type étend System.Exception et ne déclare pas tous les constructeurs requis.A type extends System.Exception and does not declare all the required constructors.

Description de la règleRule Description

Types d’exception doivent implémenter les constructeurs suivants :Exception types must implement the following constructors:

  • NewException() publicpublic NewException()

  • NewException(string) publicpublic NewException(string)

  • publique NewException (string, Exception)public NewException(string, Exception)

  • NewException protégée ou privée (SerializationInfo, StreamingContext)protected or private NewException(SerializationInfo, StreamingContext)

    Ne pas fournir le jeu complet de constructeurs peut rendre difficile une gestion des exceptions correcte.Failure to provide the full set of constructors can make it difficult to correctly handle exceptions. Par exemple, le constructeur qui possède la signature NewException(string, Exception) est utilisé pour créer des exceptions provoquées par d’autres exceptions.For example, the constructor that has the signature NewException(string, Exception) is used to create exceptions that are caused by other exceptions. Sans ce constructeur Impossible de créer et de lever une instance de votre exception personnalisée qui contient l’exception interne (imbriquée), qui est le code managé doit effectuer dans une telle situation.Without this constructor you cannot create and throw an instance of your custom exception that contains an inner (nested) exception, which is what managed code should do in such a situation. Les premiers constructeurs de trois exception sont publics par convention.The first three exception constructors are public by convention. Le quatrième constructeur est protégé dans les classes non scellés et privé dans les classes sealed.The fourth constructor is protected in unsealed classes, and private in sealed classes. Pour plus d’informations, consultez CA2229 : implémentez des constructeurs de sérialisationFor more information, see CA2229: Implement serialization constructors

Comment corriger les violationsHow to Fix Violations

Pour corriger une violation de cette règle, ajoutez les constructeurs manquants à l’exception et assurez-vous qu’ils disposent de l’accessibilité appropriée.To fix a violation of this rule, add the missing constructors to the exception, and make sure that they have the correct accessibility.

Quand supprimer les avertissementsWhen to Suppress Warnings

Il est possible de supprimer un avertissement de cette règle quand la violation est due à l’aide d’un niveau d’accès différent pour les constructeurs publics.It is safe to suppress a warning from this rule when the violation is caused by using a different access level for the public constructors.

ExempleExample

L’exemple suivant contient un type d’exception qui enfreint cette règle et un type d’exception qui est implémenté correctement.The following example contains an exception type that violates this rule and an exception type that is correctly implemented.

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