CA1040: Evitar interfaces vazias

Property Valor
ID da regra CA1040
Título Evitar interfaces vazias
Categoria Projetar
Correção interruptiva ou sem interrupção Quebra
Habilitado por padrão no .NET 8 Não

Causa

A interface não declara nenhum membro nem implementa duas ou mais outras interfaces.

Por padrão, essa regra examina apenas interfaces externamente visíveis, mas isso é configurável.

Descrição da regra

As interfaces definem os membros que fornecem um contrato de comportamento ou de uso. A funcionalidade descrita pela interface pode ser adotada por qualquer tipo, independentemente de onde o tipo seja exibido na hierarquia de herança. Um tipo implementa uma interface fornecendo implementações para os membros da interface. Uma interface vazia não define nenhum membro. Portanto, ela não define um contrato que pode ser implementado.

Se o design dela inclui interfaces vazias que os tipos devem implementar, provavelmente, você está usando uma interface como um marcador ou uma forma de identificar um grupo de tipos. Se essa identificação ocorrer em tempo de execução, a maneira correta de fazer isso será usar um atributo personalizado. Use a presença ou a ausência do atributo ou as propriedades do atributo, para identificar os tipos de destino. Se a identificação precisa ocorrer em tempo de compilação, é aceitável usar uma interface vazia.

Como corrigir violações

Remova a interface ou adicione membros a ela. Se a interface vazia estiver sendo usada para rotular um conjunto de tipos, substitua a interface por um atributo personalizado.

Quando suprimir avisos

É seguro suprimir um aviso dessa regra quando a interface é usada para identificar um conjunto de tipos em tempo de compilação.

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 CA1040
// The code that's violating the rule is on this line.
#pragma warning restore CA1040

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.CA1040.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

O exemplo a seguir mostra uma interface vazia.

// Violates rule
public interface IBadInterface
{
}
' Violates rule
Public Interface IBadInterface
End Interface