CA1047: Não declarar membros protegidos em tipos selados

Property Valor
ID da regra CA1047
Título Não declarar membros protegidos em tipos selados
Categoria Projetar
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Como sugestão

Causa

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

Descrição da regra

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

O compilador C# emite um aviso para esse erro.

Como corrigir violações

Para corrigir uma violação dessa 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 nessa 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 analisar

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

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

Incluir superfícies de API específicas

É possível configurar em quais partes da base de código essa regra deverá ser executada, com base na acessibilidade. Por exemplo, para especificar que a regra deverá ser executada apenas na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig no 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