Comparing Profiling Tools Data Files Controlling Data Collection in Profiling Tools

TypeName

ImplementStandardExceptionConstructors

CheckId

ca1032

Category

Microsoft.تصميم

تعطيل تغيير

غير فاصلة

السبب

بتوسيع نوع System.Exceptionو لا تعريف الجميع المطلوبة المنشئات.

وصف القاعدة

‏‏ استثناء يجب أن تطبق أنواع المنشئات التالية:

  • NewException() العامة

  • NewException(سلسلة) العامة

  • ‏‏ استثناء(string, ‏‏ استثناء) عمومي جديد

  • NewException خاصة أو محمية (SerializationInfo، StreamingContext)

فشل إلى توفر التعيين كاملة من construcإلىrs يجعل من الصعب إلى معالجة الاستثناءات بشكل صحيح. على سبيل المثال، الدالة الإنشائية ب توقيع NewException(string, Exception)هو المستخدمة لإنشاء الاستثناءات التي تنتج عن الاستثناءات الأخرى. دون رقم هو المنشئ، لا يمكنك إنشاء وقم بطرح نسخة عن استثناء المخصصة الخاصة بك يتضمن استثناء داخلي (متداخلة)، الذي هو يجب أن يقوم أي تعليمات برمجية مُدارة في مثل هذه حالة. المنشئات ‏‏ استثناء الثلاثة الأولى عمومية بواسطة اصطلاح. الدالة الإنشائية الرابع هو محمية في فئات unsealed، وخاصة في فئات مختوم. لمزيد من المعلومات، انظر CA2229: Implement serialization constructors.

كيف إلى الإصلاح انتهاكات

لإصلاح انتهاكا لهذه قاعدة، إضافة المنشئات المفقودة إلى ‏‏ استثناء، و التأكد من لديهم إمكانية وصول ذوي الاحتياجات الخاصة الصحيح.

عند إلى منع التحذيرات

هو آمن لمنع ظهور تحذير من القيم بالموضع هو قاعدة متى الخرق هو بسبب استخدام أحد مستويات وصول مختلفة المنشئات العامة.

مثال

يتضمن المثال التالي على نوع استثناء يخالف هذه قاعدة، و على نوع استثناء الذي يتم تنفيذه بشكل صحيح.

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