CA2222: No reducir la visibilidad del miembro heredado
TypeName |
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){}
}
}