Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Ö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();
}
}