Compartir a través de


CA2222: No reducir la visibilidad del miembro heredado

Nombre de tipo

DoNotDecreaseInheritedMemberVisibility

Identificador de comprobación

CA2222

Categoría

Microsoft.Usage

Cambio problemático

No

Motivo

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.El método privado no es final.

Descripción de la regla

No debería cambiar 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 cambia a privado y el tipo es no sellado, los tipos heredados pueden llamar a la última implementación pública del método de la jerarquía de herencia.Si debe cambiar el modificador de acceso, debe marcase el método como final o debe sellarse el tipo para evitar que el método se reemplace.

Cómo corregir infracciones

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

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

El siguiente ejemplo muestra un tipo que infringe esta regla.

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