CA1061: Neskrývejte metody třídy base
TypeName |
DoNotHideBaseClassMethods |
CheckId |
CA1061 |
Kategorie |
Microsoft.Design |
Narušující změna |
Narušující |
Příčina
Odvozený typ deklaruje metodu se stejným názvem a se stejným počtem parametrů jako u jedné z jeho základních metod; jeden nebo více parametrů je základním typem odpovídajícího parametru v rámci základní metody a jakékoliv zbývající parametry obsahují typy, které jsou shodné s odpovídajícími parametry základní metody.
Popis pravidla
Metoda základního typu je skryta identicky pojmenovanou metodou v odvozeném typu, kde je předpis parametrů odvozené metody odlišný od odpovídajících typů v předpisu parametrů základní metody pouze ve slaběji odvozených typech.
Jak vyřešit porušení
Pro vyřešení porušení tohoto pravidla je zapotřebí odstranit nebo přejmenovat metodu, nebo změnit podpis parametru tak, aby metoda neskrývala základní metodu.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.
Příklad
Následující příklad ukazuje metodu, která porušuje pravidlo.
using System;
namespace DesignLibrary
{
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 Main()
{
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");
}
}
}