Freigeben über


CA1032: Standardausnahmekonstruktoren implementieren

TypeName

ImplementStandardExceptionConstructors

CheckId

CA1032

Kategorie

Microsoft.Design

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Ein Typ erweitert System.Exception und deklariert nicht alle erforderlichen Konstruktoren.

Regelbeschreibung

Ausnahmetypen müssen die folgenden Konstruktoren implementieren:

  • NewException() (öffentlich)

  • NewException(string) (öffentlich)

  • NewException(string, Exception) (öffentlich)

  • NewException(SerializationInfo, StreamingContext) (geschützt oder privat)

Falls nicht der vollständige Satz von Konstruktoren angegeben wird, wird eine ordnungsgemäße Behandlung von Ausnahmen unter Umständen erschwert. Der Konstruktor mit der Signatur NewException(string, Exception) wird z. B. zum Erstellen von Ausnahmen verwendet, die von anderen Ausnahmen verursacht werden. Ohne diesen Konstruktor können Sie keine Instanz der benutzerdefinierten Ausnahme erstellen und auslösen, die eine innere (geschachtelte) Ausnahme enthält. Dies sollte in einer solchen Situation jedoch vom verwalteten Code geleistet werden. Die ersten drei Ausnahmekonstruktoren sind stets öffentlich. Der vierte Konstruktor ist in unversiegelten Klassen geschützt und privat in versiegelten Klassen. Weitere Informationen finden Sie unter CA2229: Serialisierungskonstruktoren implementieren.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, fügen Sie der Ausnahme die fehlenden Konstruktoren hinzu, und stellen Sie sicher, dass sie die richtige Zugriffsebene aufweisen.

Wann sollten Warnungen unterdrückt werden?

Eine Warnung dieser Regel kann gefahrlos unterdrückt werden, wenn der Verstoß durch die Verwendung einer anderen Zugriffsebene für die öffentlichen Konstruktoren verursacht wird.

Beispiel

Das folgende Beispiel enthält einen Ausnahmetyp, der gegen diese Regel verstößt, und einen Ausnahmetyp, der ordnungsgemäß implementiert ist.

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