Sdílet prostřednictvím


CA1032: Implementujte standardní konstruktory výjimky

Název_typu

ImplementStandardExceptionConstructors

CheckId

CA1032

Kategorie

Microsoft.design

Změnit rozdělení

Bez rozdělení

Příčina

Rozšiřuje typ Exception a nedeklaruje všechny požadované konstruktory.

Popis pravidla

Typy výjimku musí implementovat následující konstruktory:

  • veřejné NewException()

  • veřejné NewException(string)

  • veřejné NewException (řetězec, výjimka)

  • chráněný nebo soukromý NewException (SerializationInfo, StreamingContext)

Selhání poskytnout úplnou sadu konstruktory mohou ztížit výjimky pracuje správně.Například konstruktor, který má podpis NewException(string, Exception) se používá k vytvoření výjimky, které jsou způsobeny další výjimky.Bez tohoto konstruktoru nelze vytvořit a vyvoláním instanci své vlastní výjimek, který obsahuje vnitřní výjimce (vnořené), které je v takové situaci by měl provést co spravovaný kód.První tři výjimky konstruktory jsou veřejné úmluvou.Čtvrtý konstruktoru je chráněné neuzavřených tříd a soukromé v uzavřených tříd.Další informace získáte v tématu CA2229: Implementovat serializační konstruktory

Jak opravit porušení

Porušení tohoto pravidla, přidat chybějící konstruktory, s výjimkou a ujistěte se, že mají správné usnadnění.

Při potlačení upozornění

Je bezpečné při porušení je způsobeno použitím jiné přístupové úrovně pro veřejné konstruktory potlačí upozornění od tohoto pravidla.

Příklad

Následující příklad obsahuje typ výjimky, který porušuje pravidlo a typ výjimky, která správně implementována.

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