CA1040: Evitar interfaces vaziasCA1040: Avoid empty interfaces

ItemItem ValorValue
RuleIdRuleId CA1040CA1040
CategoriaCategory Microsoft. DesignMicrosoft.Design
A correção está sendo interrompida ou não está sendo interrompidaFix is breaking or non-breaking QuebraBreaking

CausaCause

A interface não declara nenhum membro ou implementa duas ou mais interfaces.The interface does not declare any members or implement two or more other interfaces.

Por padrão, essa regra só examina interfaces visíveis externamente, mas isso é configurável.By default, this rule only looks at externally visible interfaces, but this is configurable.

Descrição da regraRule description

As interfaces definem os membros que fornecem um contrato de comportamento ou de uso.Interfaces define members that provide a behavior or usage contract. A funcionalidade descrita pela interface pode ser adotada por qualquer tipo, independentemente de onde o tipo seja exibido na hierarquia de herança.The functionality that is described by the interface can be adopted by any type, regardless of where the type appears in the inheritance hierarchy. Um tipo implementa uma interface fornecendo implementações para os membros da interface.A type implements an interface by providing implementations for the members of the interface. Uma interface vazia não define nenhum membro.An empty interface does not define any members. Portanto, ele não define um contrato que pode ser implementado.Therefore, it does not define a contract that can be implemented.

Se o design incluir interfaces vazias que devem ser implementadas pelos tipos, você provavelmente está usando uma interface como um marcador ou uma maneira de identificar um grupo de tipos.If your design includes empty interfaces that types are expected to implement, you are probably using an interface as a marker or a way to identify a group of types. Se essa identificação ocorrer em tempo de execução, a maneira correta de fazer isso é usar um atributo personalizado.If this identification will occur at run time, the correct way to accomplish this is to use a custom attribute. Use a presença ou a ausência do atributo, ou as propriedades do atributo, para identificar os tipos de destino.Use the presence or absence of the attribute, or the properties of the attribute, to identify the target types. Se a identificação deve ocorrer no momento da compilação, é aceitável usar uma interface vazia.If the identification must occur at compile time, then it is acceptable to use an empty interface.

Como corrigir violaçõesHow to fix violations

Remova a interface ou adicione membros a ela.Remove the interface or add members to it. Se a interface vazia estiver sendo usada para rotular um conjunto de tipos, substitua a interface por um atributo personalizado.If the empty interface is being used to label a set of types, replace the interface with a custom attribute.

Quando suprimir avisosWhen to suppress warnings

É seguro suprimir um aviso dessa regra quando a interface é usada para identificar um conjunto de tipos no momento da compilação.It is safe to suppress a warning from this rule when the interface is used to identify a set of types at compile time.

Suprimir um avisoSuppress a warning

Há várias maneiras de suprimir um aviso de análise de código, incluindo a desabilitação da regra para o projeto, o uso de uma diretiva de pré-processador para desabilitá-la em uma linha de código específica ou ao aplicar o SuppressMessageAttribute atributo.There are various ways to suppress a code analysis warning, including disabling the rule for the project, using a preprocessor directive to disable it for a specific line of code, or by applying the SuppressMessageAttribute attribute. Para obter mais informações, consulte como suprimir avisos de análise de código.For more information, see How to suppress code analysis warnings.

Configurar o código para analisarConfigure code to analyze

Use a opção a seguir para configurar em quais partes de sua base de código executar essa regra.Use the following option to configure which parts of your codebase to run this rule on.

Você pode configurar essa opção apenas para essa regra, para todas as regras ou para todas as regras nesta categoria (design).You can configure this option for just this rule, for all rules, or for all rules in this category (Design). Para obter mais informações, consulte Opções de configuração de regra de qualidade de código.For more information, see Code quality rule configuration options.

Incluir superfícies de API específicasInclude specific API surfaces

Você pode configurar em quais partes de sua base de código executar essa regra, com base em sua acessibilidade.You can configure which parts of your codebase to run this rule on, based on their accessibility. Por exemplo, para especificar que a regra deve ser executada somente na superfície da API não pública, adicione o seguinte par chave-valor a um arquivo . editorconfig em seu projeto:For example, to specify that the rule should run only against the non-public API surface, add the following key-value pair to an .editorconfig file in your project:

dotnet_code_quality.CAXXXX.api_surface = private, internal

ExemploExample

O exemplo a seguir mostra uma interface vazia.The following example shows an empty interface.

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