CA1061: Nie należy ukrywać metod klasy bazowej
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1061 |
Tytuł | Nie ukrywaj metod klasy bazowej |
Kategoria | Projekt |
Poprawka powodująca niezgodność lub niezgodność | Kluczowa |
Domyślnie włączone na platformie .NET 9 | Jako sugestia |
Przyczyna
Typ pochodny deklaruje metodę o tej samej nazwie i o tej samej liczbie parametrów co jedna z jej metod podstawowych; co najmniej jeden parametr jest podstawowym typem odpowiedniego parametru w metodzie podstawowej; i wszystkie pozostałe parametry mają typy, które są identyczne z odpowiednimi parametrami w metodzie podstawowej.
Opis reguły
Metoda w typie podstawowym jest ukryta przez identycznie nazwaną metodę w typie pochodnym, gdy podpis parametru metody pochodnej różni się tylko typami, które są bardziej słabo pochodne niż odpowiadające im typy w podpisie parametru metody podstawowej.
Jak naprawić naruszenia
Aby naprawić naruszenie tej reguły, usuń lub zmień nazwę metody albo zmień sygnaturę parametru tak, aby metoda nie ukrywała metody podstawowej.
Kiedy pomijać ostrzeżenia
Nie pomijaj ostrzeżeń dla tej reguły.
Przykład
W poniższym przykładzie przedstawiono metodę, która narusza regułę.
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");
}
}