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 8 | 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