Aracılığıyla paylaş


CA1033: Arabirim 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
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Hayır

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 alternatif dışarıdan görünen bir 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 yeniden kimlikleri (açıkça) devralınan arabirim yöntemi ise, temel uygulamaya artık erişilemiyor. Geçerli örnek başvurusu aracılığıyla yapılan çağrı, türetilmiş uygulamayı çağırır; bu, özyineleme ve nihai yığın taşmasına neden olur.

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

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için, aynı işlevselliği kullanıma sunan ve türetilmiş türler tarafından görülebilen veya nonexplicit uygulamasına dönüştürülen yeni bir yöntem uygulayın. Hataya neden olan bir değişiklik kabul edilebilirse, alternatif olarak türün mühürlü olmasını sağlayabilirsiniz.

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.