Partager via


CA1061 : Ne pas masquer les méthodes de la classe de base

Propriété Value
Identificateur de la règle CA1061
Titre Ne pas masquer les méthodes de la classe de base
Catégorie Conception
Le correctif est cassant ou non cassant Rupture
Activé par défaut dans .NET 8 À titre de suggestion

Cause

Un type dérivé déclare une méthode portant le même nom et ayant 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 les paramètres restants ont des types 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 des 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 du 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 montre une méthode qui enfreint cette règle.

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");
    }
}