Partager via


CA2222 : Ne réduisez pas la visibilité des membres hérités

Élément Valeur
ID de la règle CA2222
Category Microsoft.Usage
Modification avec rupture Sans rupture

Cause

Une méthode privée dans un type non scellé a une signature identique à une méthode publique déclarée dans un type de base. La méthode privée n’est pas finale.

Notes

Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.

Description de la règle

Ne changez pas le modificateur d’accès destiné aux membres hérités. La modification d'un membre hérité au profit d'un état privé n'empêche pas les appelants d'accéder à l'implémentation de classe de base de la méthode. Si le membre est rendu privé et que le type est non scellé, les types hérités peuvent appeler la dernière implémentation publique de la méthode dans la hiérarchie d’héritage. Si vous devez modifier le modificateur d’accès, la méthode doit être marquée comme finale ou son type doit être scellé pour empêcher la substitution de la méthode.

Comment corriger les violations

Pour corriger une violation de cette règle, modifiez l’accès pour qu’il ne soit pas privé. Sinon, si votre langage de programmation le prend en charge, vous pouvez rendre la méthode finale.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

L’exemple suivant montre un type qui enfreint cette règle.

using System;
namespace UsageLibrary
{
    public class ABaseType
    {
        public void BasePublicMethod(int argument1) {}
    }
    public class ADerivedType:ABaseType
    {
        // Violates rule: DoNotDecreaseInheritedMemberVisibility.
        // The compiler returns an error if this is overridden instead of new.
        private new void BasePublicMethod(int argument1){}       
    }
}