CA1061: Non nascondere i metodi di una classe base
Proprietà | valore |
---|---|
ID regola | CA1061 |
Title | Non nascondere i metodi di una classe base |
Categoria | Progettazione |
La correzione causa un'interruzione o meno | Interruzione |
Abilitato per impostazione predefinita in .NET 9 | Come suggerimento |
Causa
Un tipo derivato dichiara un metodo con lo stesso nome e con lo stesso numero di parametri di uno dei metodi di base; uno o più parametri sono un tipo di base del parametro corrispondente nel metodo di base; e gli eventuali parametri rimanenti hanno tipi identici ai parametri corrispondenti nel metodo di base.
Descrizione regola
Un metodo in un tipo di base è nascosto da un metodo con nome identico in un tipo derivato quando la firma del parametro del metodo derivato differisce solo per i tipi derivati più deboli rispetto ai tipi corrispondenti nella firma del parametro del metodo di base.
Come correggere le violazioni
Per correggere una violazione di questa regola, rimuovere o rinominare il metodo oppure modificare la firma del parametro in modo che il metodo non nasconda il metodo di base.
Quando eliminare gli avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio seguente viene illustrato un metodo che viola la regola.
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");
}
}