CA2222: No reducir la visibilidad del miembro heredadoCA2222: Do not decrease inherited member visibility

TypeNameTypeName DoNotDecreaseInheritedMemberVisibilityDoNotDecreaseInheritedMemberVisibility
Identificador de comprobaciónCheckId CA2222CA2222
CategoríaCategory Microsoft.UsageMicrosoft.Usage
Cambio problemáticoBreaking Change No trascendentalNon Breaking

MotivoCause

Un método privado en un tipo no sellado tiene una firma que es idéntica a un método público declarado en un tipo base.A private method in an unsealed type has a signature that is identical to a public method declared in a base type. El método privado no es final.The private method is not final.

Descripción de la reglaRule Description

No debería cambiar el modificador de acceso para los miembros heredados.You should not change the access modifier for inherited members. Cambiando un miembro heredado a privado no evita que los llamadores tengan acceso a la implementación de la clase base del método.Changing an inherited member to private does not prevent callers from accessing the base class implementation of the method. Si el miembro se cambia a privado y el tipo está sellado, pueden llamar tipos heredados a la última implementación pública del método en la jerarquía de herencia.If the member is made private and the type is unsealed, inheriting types can call the last public implementation of the method in the inheritance hierarchy. Si necesita cambiar el modificador de acceso, el método debería marcarse final o su tipo debe ser sealed para impedir que el método se invalide.If you must change the access modifier, either the method should be marked final or its type should be sealed to prevent the method from being overridden.

Cómo corregir infraccionesHow to Fix Violations

Para corregir una infracción de esta regla, cambie el acceso para ser no privados.To fix a violation of this rule, change the access to be non-private. O bien, si su lenguaje de programación lo admite, puede realizar el método final.Alternatively, if your programming language supports it, you can make the method final.

Cuándo suprimir advertenciasWhen to Suppress Warnings

No suprima las advertencias de esta regla.Do not suppress a warning from this rule.

EjemploExample

En el ejemplo siguiente se muestra un tipo que infringe esta regla.The following example shows a type that violates this rule.

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