CA1052: os tipos suportes estáticos devem ser Static ou NotInheritable

Property Valor
ID da regra CA1052
Título Os tipos de suporte estático devem ser Static ou NotInheritable
Categoria Projetar
Correção interruptiva ou sem interrupção Quebra
Habilitado por padrão no .NET 8 Não

Causa

Um tipo não abstrato contém apenas membros estáticos (exceto um possível construtor padrão) e não é declarado com o modificador static ou Shared.

Por padrão, essa regra apenas analisa os tipos visíveis externamente, mas isso é configurável.

Descrição da regra

A regra CA1052 pressupõe que um tipo que contém apenas membros estáticos não foi projetado para ser herdado, pois o tipo não fornece nenhuma funcionalidade que possa ser substituída em um tipo derivado. Um tipo que não é deve ser herdado deve ser marcado com o modificador static em C# para proibir seu uso como um tipo de base. Além disso, seu construtor padrão deve ser removido. No Visual Basic, a classe deve ser convertida em um módulo.

Essa regra não é disparada para classes abstratas ou classes que têm uma classe base. No entanto, a regra é acionada para classes que dão suporte a uma interface vazia.

Observação

Na implementação mais recente do analisador dessa regra, ela também abrange a funcionalidade da regra CA1053.

Como corrigir violações

Para corrigir uma violação dessa regra, marque o tipo como static e remova o construtor padrão (C#) ou converta-o em um módulo (Visual Basic).

Quando suprimir avisos

Você pode suprimir violações nos seguintes casos:

  • O tipo foi projetado para ser herdado. A ausência do modificador static sugere que o tipo é útil como um tipo base.
  • O tipo é usado como um argumento de tipo. Tipos estáticos não podem ser usados como argumentos de tipo.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

#pragma warning disable CA1052
// The code that's violating the rule is on this line.
#pragma warning restore CA1052

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA1052.severity = none

Para obter mais informações, confira Como suprimir avisos de análise de código.

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 de violação

O seguinte exemplo mostra um tipo que viola a regra:

public class StaticMembers
{
    public static int SomeProperty { get; set; }
    public static void SomeMethod() { }
}
Imports System

Namespace ca1052

    Public Class StaticMembers

        Shared Property SomeProperty As Integer

        Private Sub New()
        End Sub

        Shared Sub SomeMethod()
        End Sub

    End Class

End Namespace

Correção com o modificador estático

O seguinte exemplo mostra como corrigir uma violação dessa regra marcando o tipo com o modificador static em C#:

public static class StaticMembers
{
    public static int SomeProperty { get; set; }
    public static void SomeMethod() { }
}