CA1061 : Ne pas masquer les méthodes de la classe de base
TypeName |
DoNotHideBaseClassMethods |
CheckId |
CA1061 |
Catégorie |
Microsoft.CSharp |
Modification avec rupture |
Oui |
Cause
Un type dérivé déclare une méthode avec le même nom et le même nombre de paramètres que l'une de ses méthodes de base, un ou plusieurs des paramètres est un type de base du paramètre correspondant dans la méthode de base et tous paramètres restants ont des types qui sont identiques aux paramètres correspondants dans la méthode de base.
Description de la règle
Une méthode dans un type de base est masquée par une méthode portant le même nom dans un type dérivé lorsque la signature de paramètre de la méthode dérivée diffère uniquement par les types qui sont dérivés plus faiblement que les types correspondants dans la signature de paramètre de la méthode de base.
Comment corriger les violations
Pour corriger une violation de cette règle, supprimez ou renommez la méthode, ou modifiez la signature de paramètre afin que la méthode ne masque pas la méthode de base.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle.
Exemple
L'exemple suivant présente une méthode qui enfreint la règle.
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");
}
}
}