Compartilhar via


CA2222: não diminuir a visibilidade de membro herdada

TypeName

DoNotDecreaseInheritedMemberVisibility

CheckId

CA2222

Categoria

Microsoft.Usage

Alteração Significativa

Sem Quebra

Causa

Um método particular em um tipo não selado tem uma assinatura idêntica a 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.Alterar um membro herdado para particular não impede que os chamadores acessem a implementação da classe base do método.Se o membro for tornado particular e o tipo for não lacrado, tipos herdeiros podem chamar a implementação pública mais recente do método na hierarquia de herança.Se você precisar modificar o modificador de acesso, ou o método deve ser marcado como final ou seu tipo deve ser selado para impedir que o método seja substituído.

Como Corrigir Violações

Para corrigir uma violação desta regra, altere o acesso para ser não-particular.Como alternativa, se sua linguagem de programação o permitir, você tornar o método final.

Quando Suprimir Alertas

Não elimine um alerta desta regra.

Exemplo

O exemplo a seguir mostra um tipo que viola esta 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){}       
    }
}