Aracılığıyla paylaş


CA1033: Arabirim yöntemleri alt türler tarafından çağırılabilir olmalıdır

TypeName

InterfaceMethodsShouldBeCallableByChildTypes

CheckId

CA1033

Kategori

Microsoft.Design

Değişiklik kesiliyor

Bölünemez

Neden

Ağzı açık dışarıdan görünen bir tür açık yöntem uygulaması ortak bir arabirim sağlar ve aynı ada sahip bir alternatif dışarıdan görünür bir yöntem sağlamaz.

Kural Tanımı

Açıkça bir ortak arabirim yöntemi uygulayan temel tür düşünün.Temel türünden türetilmiş bir tür devralınan arabirim yöntemi, yalnızca geçerli örneği başvurusu yoluyla erişebilirsiniz (this C# [NULL]'taki) arabirimine atayın.Türetilmiş bir tür devralınan arabirim yöntemi (açıkça) re-implements, temel uygulama artık erişilebilir.Geçerli örneği başvurusu çağrısıyla türetilmiş uygulaması çağırır; Bu, özyineleme ve ileride yığın taşmasına neden olur.

Bu kuralın ihlali açık uygulaması için raporda IDisposable.Dispose dışarıdan görünür olduğunda Close() veya System.IDisposable.Dispose(Boolean) yöntemi sağlanır.

İhlalleri düzeltmek nasıl

Bu kuralı ihlal düzeltmek için aynı işlevselliği sunar ve türetilen türler için görünür olan yeni bir yöntemi uygulamak veya açıkça verilmemiş bir uygulamasını değiştirin.Bir son dakika değişikliği kabul edilebilir değilse, alternatif mühürlü türü olmasını sağlamaktır.

Uyarıları ne zaman

Dışarıdan görünür bir yöntem ise, açıkça uygulanan yöntem adından farklı ama aynı işlevselliğe sahip olması koşuluyla, bir uyarı bu kuraldan bastırmak güvenlidir.

Örnek

Aşağıdaki örnek, bir tür gösterir ViolatingBase, kural ve bir tür ihlal ediyor FixedBase, ihlali için bir düzeltme gösteren.

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();
      }
   }
}

Ayrıca bkz.

Başvuru

Arabirimler (C# Programlama Kılavuzu)