CA1061: Non nascondere i metodi di una classe base
TypeName |
DoNotHideBaseClassMethods |
CheckId |
CA1061 |
Category |
Microsoft.Design |
Breaking Change |
Breaking |
Causa
Un tipo derivato consente di dichiarare un metodo con lo stesso nome e numero di parametri di uno dei relativi metodi base; uno o più parametri sono un tipo base del parametro corrispondente nel metodo base, mentre i rimanenti parametri dispongono di tipi identici ai parametri corrispondenti nel metodo base.
Descrizione della regola
Un metodo di un tipo base è nascosto da un metodo con lo stesso nome in un tipo derivato quando la firma di parametro del metodo derivato differisce solo dai tipi che sono derivati in modo più debole rispetto ai tipi corrispondenti nella firma di parametro del metodo base.
Come correggere le violazioni
Per correggere una violazione di questa regola, rimuovere o rinominare il metodo oppure modificare la firma di parametro in modo che il metodo non nasconda il metodo base.
Esclusione di avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio riportato di seguito viene illustrato un metodo che viola la regola.
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");
}
}
}