CA2222: Não diminuir a visibilidade de membro herdado
TypeName |
DoNotDecreaseInheritedMemberVisibility |
CheckId |
CA2222 |
<strong>Categoria</strong> |
Microsoft.Usage |
Alteração significativa |
Não separável |
Causa
Um método particular em um tipo sem lacre tem uma assinatura que é idêntica de um método público declarado em um tipo base. O método particular não é final.
Descrição da regra
Você não deve alterar o modificador de acesso para membros herdados. A alteração de um membro herdado para private não impede que chamadores acessem a implementação de classe base do método. Se o membro é feito em particular e o tipo é sem lacre, tipos de herança pode chamar a última implementação pública do método na hierarquia de herança. Se você precisar alterar o modificador de acesso, o método deve ser marcado como final ou seu tipo deve ser sealed para impedir que o método seja substituído.
Como corrigir violações
Para corrigir uma violação desta regra, altere o acesso a ser não-particulares. Como alternativa, se aceitar sua linguagem de programação, você pode fazer o método final.
Quando suprimir avisos
Não suprimir um aviso da regra.
Exemplo
O exemplo a seguir mostra um tipo que viole essa regra.
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){}
}
}