Implémenter des constructeurs d'exception standard
Mise à jour : novembre 2007
TypeName |
ImplementStandardExceptionConstructors |
CheckId |
CA1032 |
Catégorie |
Microsoft.CSharp |
Modification avec rupture |
Modification sans rupture |
Cause
Un type étend System.Exception et ne déclare pas tous les constructeurs requis.
Description de la règle
Les types d'exception doivent implémenter les constructeurs suivants :
public NewException()
public NewException(string)
public NewException(string, Exception)
NewException(SerializationInfo, StreamingContext) protégé ou privé
Ne pas fournir le jeu complet de constructeurs peut rendre difficile une gestion des exceptions correcte. Par exemple, le constructeur avec la signature NewException(string, Exception) est utilisé pour créer des exceptions provoquées par d'autres exceptions. Sans ce constructeur, vous ne pouvez ni créer, ni lever une instance de votre exception personnalisée contenant une exception interne (imbriquée) qui correspond à l'action que doit effectuer un code managé dans une telle situation. Les trois premiers constructeurs d'exceptions sont publics par convention. Le constructeur quatrième est protégé dans les classes non-sealed, et privé dans les classes sealed. Pour plus d'informations, consultez Implémentez des constructeurs de sérialisation
Comment corriger les violations
Pour corriger une violation de cette règle, ajoutez les constructeurs manquants à l'exception, et assurez-vous qu'ils bénéficient de l'accessibilité appropriée.
Quand supprimer les avertissements
Il est possible de supprimer sans risque un avertissement de cette règle quand la violation est provoquée par l'utilisation d'un niveau d'accès différent pour les constructeurs publics.
Exemple
L'exemple suivant présente un type d'exception qui enfreint cette règle, et un autre d'implémentation correcte.
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.
}
}
}