Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
| Propiedad | Valor |
|---|---|
| Identificador de la regla | CA1061 |
| Título | No ocultes métodos de la clase base |
| Categoría | Diseño |
| La corrección interrumpe o no interrumpe | Ruptura |
| Habilitado de forma predeterminada en .NET 10 | Como sugerencia |
| Idiomas aplicables | C# y Visual Basic |
Causa
Un tipo derivado declara un método con el mismo nombre y con el mismo número de parámetros que uno de sus métodos base; uno o varios parámetros son un tipo base del parámetro correspondiente en el método base; y los parámetros restantes tienen tipos idénticos a los parámetros correspondientes en el método base.
Descripción de la regla
Un método en un tipo base está oculto por un método del mismo nombre en un tipo derivado cuando la firma de los parámetros del método derivado solo se diferencia por tipos menos derivados que los tipos correspondientes en la firma de los parámetros 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 para que el método no oculte el método base.
Cuándo suprimir las advertencias
No suprima las advertencias de esta regla.
Ejemplo
En el ejemplo siguiente se muestra un método que infringe la regla.
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();
// 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");
}
}