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 9 | 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 o aviso CS0628 em vez de CA1047 para essa situação.
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
Nota
Substitua a parte XXXX
de CAXXXX
pela ID da regra aplicável.
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