Partilhar via


CA1047: Não declare membros protegidos em tipos lacrados

Property valor
ID da regra CA1047
Título Não declarar membros protegidos em tipos selados
Categoria Desenho
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 9 Como sugestão

Motivo

Um tipo público é sealed (NotInheritable no Visual basic) e declara um membro protegido ou um tipo aninhado protegido. Esta regra não relata violações de Finalize métodos, que devem seguir esse padrão.

Descrição da regra

Os tipos declaram membros protegidos para que os tipos herdados possam acessar ou substituir o membro. Por definição, você não pode herdar de um tipo selado, o que significa que os métodos protegidos em tipos selados não podem ser chamados.

O compilador C# emite aviso CS0628 em vez de CA1047 para esta situação.

Como corrigir violações

Para corrigir uma violação desta regra, altere o nível de acesso do membro para privado ou torne o tipo herdável.

Quando suprimir avisos

Não suprima um aviso desta regra. Deixar o tipo em seu estado atual pode causar problemas de manutenção e não oferece nenhum benefício.

Configurar código para análise

Use a opção a seguir para configurar em quais partes da sua base de código executar essa regra.

Você pode configurar essa opção apenas para esta regra, para todas as regras às quais ela se aplica ou para todas as regras nesta categoria (Design) às quais ela se aplica. Para obter mais informações, consulte Opções de configuração da regra de qualidade de código.

Incluir superfícies de API específicas

Você pode configurar em quais partes da sua base de código executar essa regra, com base em sua acessibilidade. Por exemplo, para especificar que a regra deve ser executada somente na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig em seu projeto:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Exemplo

O exemplo a seguir mostra um tipo que viola essa regra.

public sealed class SealedClass
{
    protected void ProtectedMethod(){}
}
Public NotInheritable Class BadSealedType
    Protected  Sub MyMethod
    End Sub
End Class