No oculte los métodos de clases base
Actualización: noviembre 2007
TypeName |
DoNotHideBaseClassMethods |
Identificador de comprobación |
CA1061 |
Category |
Microsoft.Design |
Cambio problemático |
Sí |
Motivo
Un tipo derivado declara un método con el mismo nombre y el mismo número de parámetros que uno de sus métodos base; uno o varios de los parámetros es un tipo base del parámetro correspondiente en el método base; y los parámetros restantes tienen tipos idénticos a los de los parámetros correspondientes del método base.
Descripción de la regla
Un método de un tipo base está oculto por un método del mismo nombre en un tipo derivado, cuando la firma del parámetro del método derivado sólo se diferencia por tipos derivados de manera más débil que los tipos correspondientes de la firma del parámetro del método base.
Cómo corregir infracciones
Para corregir una infracción de esta regla, quite el método o cámbiele el nombre, o bien cambie la firma del parámetro de modo que el método no oculte el método base.
Cuándo suprimir advertencias
No suprima las advertencias de esta regla.
Ejemplo
El siguiente ejemplo muestra un método que infringe la regla.
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");
}
}
}