CA1040: избегайте пустых интерфейсов
Свойство | Значение |
---|---|
Идентификатор правила | CA1040 |
Заголовок | Не используйте пустые интерфейсы |
Категория | Проектирование |
Исправление является критическим или не критическим | Критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Интерфейс не объявляет никакие элементы или не реализует как минимум два других интерфейса.
По умолчанию это правило проверяет только видимые извне интерфейсы, но это поведение можно настроить.
Описание правила
Интерфейсы определяют члены, предоставляющие поведение или соглашение об использовании. Функциональность, описанная интерфейсом, может быть использована любым типом вне зависимости от расположения типа в иерархии интерфейса. Тип реализует интерфейс путем предоставления реализаций для членов интерфейса. Пустой интерфейс не определяет никакие элементы. Следовательно, он не определяет контракт, который можно реализовать.
Если ваш дизайн включает пустые интерфейсы, которые, как ожидается, будут реализованы типами, вы, вероятно, используете интерфейс как метку или способ идентифицировать группу типов. Если эта идентификация будет происходить во время выполнения, то правильнее использовать для этого настраиваемый атрибут. Для определения целевых типов используйте присутствие или отсутствие атрибута либо свойства атрибута. Если идентификация должна происходить во время компиляции, то использовать пустой интерфейс допустимо.
Устранение нарушений
Удалите интерфейс или добавьте в него элементы. Если пустой интерфейс используется для отметки набора типов, замените этот интерфейс настраиваемым атрибутом.
Когда лучше отключить предупреждения
Вы можете безопасно отключить предупреждение из этого правила, если интерфейс используется для идентификации набора типов во время компиляции.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1040
// The code that's violating the rule is on this line.
#pragma warning restore CA1040
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1040.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Настройка кода для анализа
Используйте следующий параметр, чтобы выбрать части базы кода для применения этого правила.
Этот параметр можно настроить только для этого правила, для всех правил, к которым он применяется, или для всех правил в этой категории (конструкторе), к которым она применяется. Дополнительные сведения см. в статье Параметры конфигурации правила качества кода.
Включение определенных контактных зон API
Вы можете настроить, для каких частей базы кода следует выполнять это правило в зависимости от их доступности. Например, чтобы указать, что правило должно выполняться только для закрытой контактной зоны API, добавьте следующую пару "ключ-значение" в файл EDITORCONFIG в своем проекте:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Пример
В следующем примере показан пустой интерфейс.
// Violates rule
public interface IBadInterface
{
}
' Violates rule
Public Interface IBadInterface
End Interface