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

Özellik Değer
Kural Kimliği CA1033
Başlık Arabirim metotları alt türler tarafından çağrılabilmelidir
Kategori Tasarım
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Hayır
Geçerli diller C# ve Visual Basic

Neden

Mühürsüz dışarıdan görülebilir bir tür, kamu bir arabiriminin açık bir yöntem uygulamasını sağlar ve aynı adı taşıyan alternatif bir dışarıdan görülebilir yöntem sağlamaz.

Kural açıklaması

Bir ortak arabirim yöntemini açıkça uygulayan bir temel tür düşünün. Temel türden türetilen bir tür, devralınan arabirim yöntemine yalnızca arabirime aktarılan geçerli örneğe (this C#'de) yapılan bir başvuru aracılığıyla erişebilir. Türetilmiş tür, devralınan arabirim yöntemini yeniden açıkça uygularsa, temel uygulamaya artık erişilemez. Geçerli örnek başvurusu aracılığıyla yapılan çağrı, türetilmiş uygulamayı çalıştırır; bu durum, özyinelemeye ve nihayetinde yığın taşmasına neden olur.

Bu kural, dışarıdan görünür Close() veya System.IDisposable.Dispose(Boolean) yöntemi sağlandığında System.IDisposable.Dispose için açık bir implementasyon ihlal bildirmez.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için, aynı işlevselliği türetilmiş türler tarafından görülebilecek şekilde ortaya koyan yeni bir yöntem uygulayın veya nonexplicit bir uygulamaya dönüştürün. Uyumsuzluk oluşturan bir değişiklik kabul edilebilirse, alternatif olarak türü mühürlü yapmaktır.

Uyarıların ne zaman bastırılması gerekiyor?

Aynı işlevselliğe sahip ancak açıkça uygulanan yöntemden farklı bir ada sahip dışarıdan görünür bir yöntem sağlanmışsa, bu kuraldan gelen bir uyarıyı bastırmak güvenlidir.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

#pragma warning disable CA1033
// The code that's violating the rule is on this line.
#pragma warning restore CA1033

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

[*.{cs,vb}]
dotnet_diagnostic.CA1033.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Örnek

Aşağıdaki örnekte kuralı ViolatingBaseihlal eden bir türü ve ihlale yönelik bir düzeltme gösteren bir türü FixedBasegösterilir.

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.