CA1033: Interface methods should be callable by child types

TypeName

InterfaceMethodsShouldBeCallableByChildTypes

CheckId

ca1033

Category

Microsoft.تصميم

تعطيل تغيير

غير فاصلة

السبب

نوع مرئي خارجياً unsealed يوفر تطبيق أسلوب واضح للواجهة العمومية و لا يوفر طريقة بديلة مرئي خارجياً بنفس الاسم.

وصف القاعدة

خذ بعين الاعتبار الأساس نوع بوضوح بتنفيذ أسلوب واجهة عمومية. هو نوع من مشتقة من النوع الأساسي يمكن فقط الوصول إلى أسلوب الواجهة الموروثة من خلال مرجع الحالي مثيل ( thisفي C#) التي يتم تحويل إلى الواجهة. إذا كان نوع مشتق re-implements (بوضوح) أسلوب الواجهة الموروثة، وتطبيق القاعدة هو لم يعد يمكن الوصول إليه. الاتصال من خلال مرجع المثيل الحالي سيستدعي تنفيذ المشتقة؛ وينتج عن هذا العودية و تجاوز سعة مكدس eventual.

Th هو قاعدة لا يعلم انتهاكا لتطبيق صريح ل IDisposable.Disposeعند vهوible خارجياً Close()أو System.IDisposable.Dispose(Boolean)أسلوب هو المتوفرة.

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

لإصلاح انتهاكا لترتيب هو قاعدة، قم بتطبيق أسلوب جديد يقوم بالكشف عن الوظيفة نفسها و هو vهوible للأنواع المشتقة أو تغييرها لتنفيذ ما غير واضح. إذا كان مقبولاً تغيير الفاصلة، بديل جعل نوع مغلقة.

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

هو آمن لمنع ظهور تحذير من القيم بالموضع هو قاعدة إذا أسلوب vهوible خارجياً هو شرط يحتوي على نفس الأداء الوظيفي ولكن باسم مختلف عن الطريقة التي تم تنفيذها بشكل صريح.

مثال

يوضح المثال التالي نوع، ViolatingBase، التي تخالف قاعدة نوع، FixedBase، التي توضح إصلاحًا لخرق.

using System;

namespace DesignLibrary
{
   public interface ITest
   {
      void SomeMethod();
   }

   public class ViolatingBase: ITest
   {
      void ITest.SomeMethod()
      {
         // ...
      }
   }

   public class FixedBase: ITest
   {
      void ITest.SomeMethod() 
      {
         SomeMethod();
      }

      protected void SomeMethod()
      {
         // ...
      }
   }

   sealed public class Derived: FixedBase, ITest
   {
      public void SomeMethod()
      {
         // The following would cause recursion and a stack overflow.
         // ((ITest)this).SomeMethod();

         // The following is unavailable if derived from ViolatingBase.
         base.SomeMethod();
      }
   }
}

راجع أيضًا:

المرجع

واجهات (C# البرمجة الدليل)