Share via


CA2222: No disminuir la visibilidad del miembro heredado

Elemento Valor
RuleId CA2222
Category Microsoft.Usage
Cambio importante Poco problemático

Causa

Un método privado de un tipo no sellado tiene una firma idéntica a un método público declarado en un tipo base. El método privado no es final.

Nota

Esta regla está en desuso. Para más información, consulte Reglas en desuso.

Descripción de la regla

No cambie el modificador de acceso para los miembros heredados. Cambiando un miembro heredado a privado no evita que los llamadores tengan acceso a la implementación de la clase base del método. Si el miembro se convierte en privado y el tipo es no sellado, los tipos heredados pueden llamar a la última implementación pública del método en la jerarquía de herencia. Si debe cambiar el modificador de acceso, el método debe marcarse como final o su tipo debe estar sellado para impedir que el método se invalide.

Cómo corregir infracciones

Para corregir una infracción de esta regla, cambie el acceso a no privado. Como alternativa, si el lenguaje de programación lo admite, puede hacer que el método sea final.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

Ejemplo

En el ejemplo siguiente se muestra un tipo que infringe esta regla.

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