CA1040: Evite interfaces vazias
Propriedade | valor |
---|---|
ID da regra | CA1040 |
Cargo | Evite interfaces vazias |
Categoria | Desenho |
A correção está quebrando ou não quebrando | Quebrando |
Habilitado por padrão no .NET 8 | Não |
Causa
A interface não declara nenhum membro ou implementa duas ou mais outras interfaces.
Por padrão, essa regra só examina interfaces visíveis externamente, mas isso é configurável.
Descrição da regra
As interfaces definem membros que fornecem um comportamento ou contrato de uso. A funcionalidade descrita pela interface pode ser adotada por qualquer tipo, independentemente de onde o tipo aparece 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, não define um contrato que possa ser implementado.
Se o seu design inclui interfaces vazias que se espera que os tipos implementem, você provavelmente está usando uma interface como um marcador ou uma maneira de identificar um grupo de tipos. Se essa identificação ocorrer em tempo de execução, a maneira correta de fazer isso é usar um atributo personalizado. Use a presença ou ausência do atributo, ou as propriedades do atributo, para identificar os tipos de destino. Se a identificação deve ocorrer em tempo de compilação, entã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
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 para um arquivo, pasta ou projeto, defina sua severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1040.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Configurar código para análise
Use a opção a seguir para configurar em quais partes da 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 uma interface vazia.
// Violates rule
public interface IBadInterface
{
}
' Violates rule
Public Interface IBadInterface
End Interface