Partager via


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

TypeName

DoNotDecreaseInheritedMemberVisibility

CheckId

CA2222

Catégorie

Microsoft.Usage

Modification avec rupture

Modification sans rupture

Cause

Une méthode privée dans un type non-sealed (non scellé) présente une signature identique à une méthode publique déclarée dans un type de base.La méthode privée n'est pas finale.

Description de la règle

Vous ne devez pas modifier 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 si le type est non-sealed (non scellé), hériter des types peut entraîner l'appel à la dernière implémentation publique de la méthode au sein de la hiérarchie d'héritage.Si vous devez changer le modificateur d'accès, la méthode doit être marquée comme finale ou son type doit être sealed (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 lui attribuer l'état non privé.Vous pouvez également rendre la méthode finale si votre langage de programmation le permet.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

L'exemple suivant affiche un type qui ne respecte pas cette règle.

Imports System

Namespace UsageLibrary
Public Class ABaseType

   Public Sub BasePublicMethod(argument1 As Integer)
   End Sub 'BasePublicMethod

End Class 'ABaseType 

Public Class ADerivedType
   Inherits ABaseType

   ' Violates rule DoNotDecreaseInheritedMemberVisibility. 
   Private Shadows Sub BasePublicMethod(argument1 As Integer)
   End Sub 'BasePublicMethod
End Class 'ADerivedType

End Namespace
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){}       
    }
}