CA1061: Taban sınıf yöntemlerini gizlemeyin
Özellik | Değer |
---|---|
Kural Kimliği | CA1061 |
Başlık | Temel sınıf metotlarını gizlemeyin |
Kategori | Tasarım |
Hataya neden olan veya bozulmayan düzeltme | Yeni |
.NET 8'de varsayılan olarak etkin | Öneri olarak |
Neden
Türetilmiş bir tür, temel yöntemlerinden biriyle aynı ada ve aynı sayıda parametreye sahip bir yöntem bildirir; parametrelerden biri veya daha fazlası, temel yöntemde karşılık gelen parametrenin temel türüdür; ve kalan parametrelerin, temel yöntemdeki karşılık gelen parametrelerle aynı olan türleri vardır.
Kural açıklaması
Temel türdeki bir yöntem, türetilen yöntemin parametre imzası yalnızca temel yöntemin parametre imzasında karşılık gelen türlerden daha zayıf türlere göre farklılık gösterdiğinde türetilmiş bir türdeki aynı adlı yöntem tarafından gizlenir.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmek için yöntemi kaldırın veya yeniden adlandırın ya da yöntemin temel yöntemi gizlememesi için parametre imzasını değiştirin.
Uyarıların ne zaman bastırılması gerekiyor?
Bu kuraldan uyarıyı bastırmayın.
Örnek
Aşağıdaki örnekte kuralı ihlal eden bir yöntem gösterilmektedir.
class BaseType
{
internal void MethodOne(string inputOne, object inputTwo)
{
Console.WriteLine("Base: {0}, {1}", inputOne, inputTwo);
}
internal void MethodTwo(string inputOne, string inputTwo)
{
Console.WriteLine("Base: {0}, {1}", inputOne, inputTwo);
}
}
class DerivedType : BaseType
{
internal void MethodOne(string inputOne, string inputTwo)
{
Console.WriteLine("Derived: {0}, {1}", inputOne, inputTwo);
}
// This method violates the rule.
internal void MethodTwo(string inputOne, object inputTwo)
{
Console.WriteLine("Derived: {0}, {1}", inputOne, inputTwo);
}
}
class Test
{
static void Main1061()
{
DerivedType derived = new DerivedType();
// Calls DerivedType.MethodOne.
derived.MethodOne("string1", "string2");
// Calls BaseType.MethodOne.
derived.MethodOne("string1", (object)"string2");
// Both of these call DerivedType.MethodTwo.
derived.MethodTwo("string1", "string2");
derived.MethodTwo("string1", (object)"string2");
}
}