CA1040. Не используйте пустые интерфейсыCA1040: Avoid empty interfaces

ЭлементItem ЗначениеValue
Идентификатор правилаRuleId CA1040CA1040
КатегорияCategory Microsoft. DesignMicrosoft.Design
Исправление не критическое или не критическоеFix is breaking or non-breaking КритическоеBreaking

ПричинаCause

Интерфейс не объявляет ни одного члена или не реализует два или больше других интерфейсов.The interface does not declare any members or implement two or more other interfaces.

По умолчанию это правило рассматривает только видимые извне интерфейсы, но это можно настроить.By default, this rule only looks at externally visible interfaces, but this is configurable.

Описание правилаRule description

Интерфейсы определяют члены, предоставляющие поведение или соглашение об использовании.Interfaces define members that provide a behavior or usage contract. Функциональность, описанная интерфейсом, может быть использована любым типом вне зависимости от расположения типа в иерархии интерфейса.The functionality that is described by the interface can be adopted by any type, regardless of where the type appears in the inheritance hierarchy. Тип реализует интерфейс путем предоставления реализаций для членов интерфейса.A type implements an interface by providing implementations for the members of the interface. Пустой интерфейс не определяет никаких членов.An empty interface does not define any members. Поэтому он не определяет контракт, который может быть реализован.Therefore, it does not define a contract that can be implemented.

Если проект включает пустые интерфейсы, которые должны быть реализованы типами, то, вероятно, вы используете интерфейс в качестве маркера или способ для обнаружения группы типов.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. Если эта идентификация будет происходить во время выполнения, то правильный способ сделать это — использовать настраиваемый атрибут.If this identification will occur at run time, the correct way to accomplish this is to use a custom attribute. Для определения целевых типов используйте атрибут присутствие или отсутствие атрибута или свойства атрибута.Use the presence or absence of the attribute, or the properties of the attribute, to identify the target types. Если идентификация должна происходить во время компиляции, можно использовать пустой интерфейс.If the identification must occur at compile time, then it is acceptable to use an empty interface.

Устранение нарушенийHow to fix violations

Удалите интерфейс или добавьте в него элементы.Remove the interface or add members to it. Если для обозначения набора типов используется пустой интерфейс, замените интерфейс пользовательским атрибутом.If the empty interface is being used to label a set of types, replace the interface with a custom attribute.

Когда следует подавлять предупрежденияWhen to suppress warnings

Можно отключить вывод предупреждения из этого правила, если интерфейс используется для обнаружения набора типов во время компиляции.It is safe to suppress a warning from this rule when the interface is used to identify a set of types at compile time.

Подавлять предупреждениеSuppress a warning

Существует несколько способов отключить предупреждение анализа кода, в том числе отключить правило для проекта, использовать директиву препроцессора, чтобы отключить его для конкретной строки кода, или применив SuppressMessageAttribute атрибут.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. Дополнительные сведения см. в разделе Отключение предупреждений анализа кода.For more information, see How to suppress code analysis warnings.

Настройка анализируемого кодаConfigure code to analyze

Используйте следующий параметр, чтобы настроить, на какие части базы кода следует запускать это правило.Use the following option to configure which parts of your codebase to run this rule on.

Этот параметр можно настроить только для этого правила, для всех правил или для всех правил в этой категории (конструктор).You can configure this option for just this rule, for all rules, or for all rules in this category (Design). Дополнительные сведения см. в разделе Параметры конфигурации правила качества кода.For more information, see Code quality rule configuration options.

Включить определенные поверхности APIInclude specific API surfaces

Вы можете настроить, на какие части базы кода следует запускать это правило, в зависимости от их доступности.You can configure which parts of your codebase to run this rule on, based on their accessibility. Например, чтобы указать, что правило должно выполняться только для поверхности API, не являющейся общедоступной, добавьте следующую пару "ключ-значение" в файл . editorconfig в проекте: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

ПримерExample

В следующем примере показан пустой интерфейс.The following example shows an empty interface.

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