CA1061: Nie należy ukrywać metod klasy podstawowej
TypeName |
DoNotHideBaseClassMethods |
CheckId |
CA1061 |
Kategoria |
Microsoft.Design |
Zmiana kluczowa |
Kluczowa |
Przyczyna
Typ pochodny deklaruje metodę, o tej samej nazwie i z taką samą liczbą parametrów co jedna z jego metod podstawowych; jeden lub więcej parametrów jest typem podstawowym odpowiadającego mu parametru w metodzie podstawowej; a wszystkie pozostałe parametry typów są identyczne z odpowiednimi parametrami metody podstawowej.
Opis reguły
Metoda w typie podstawowym jest ukryta przez metodę o identycznej nazwie typu pochodnego, gdy sygnatura parametru metody pochodnej różni się tylko typami, które są bardziej słabo dziedziczone niż odpowiadające typy w sygnaturze parametru metody podstawowej.
Jak naprawić naruszenia
Aby naprawić naruszenie tej zasady, usuń lub zmień nazwę metody lub zmienić sygnaturę parametru, tak aby metoda nie ukrywała metody podstawowej.
Kiedy pomijać ostrzeżenia
Nie należy pomijać ostrzeżenia dotyczącego tej reguły.
Przykład
W poniższym przykładzie przedstawiono metodę, która narusza regułę.
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");
}
}
}