CA1040: избегайте пустых интерфейсов
TypeName |
AvoidEmptyInterfaces |
CheckId |
CA1040 |
Категория |
Microsoft.Design |
Критическое изменение |
Критическое изменение |
Причина
Интерфейс не объявляет никаких членов или реализует два или более других интерфейсов.
Описание правила
Интерфейсы определяют члены, предоставляющие поведение или соглашение об использовании. Функциональность, описанная интерфейсом, может быть использована любым типом вне зависимости от расположения типа в иерархии интерфейса. Тип реализует интерфейс путем предоставления реализаций для членов интерфейса. Пустой интерфейс не определяет никакие члены. Таким образом, он не определяет соглашение, которое может быть реализовано.
Если в вашем коде содержатся пустые интерфейсы, которые должны быть реализованы типами, возможно, вы используете интерфейс в качестве маркера или обозначения группы типов. Если такое обозначение произойдет при выполнении программы, то правильный способ решения этой задачи — применение пользовательского атрибута. Используйте наличие или отсутствие атрибута или свойств атрибута для определения типов целевого объекта. Если определение должно произойти при компиляции, то можно использовать пустой интерфейс.
Устранение нарушений
Удалите интерфейс или добавьте в него члены. Если пустой интерфейс используется для обозначения набора типов, замените интерфейс пользовательским атрибутом.
Отключение предупреждений
Можно безопасно отключать предупреждение этого правило, если интерфейс используется для обозначения набора типов при компиляции.
Пример
В следующем примере демонстрируется пустой интерфейс.
Imports System
Namespace Samples
Public Interface IBadInterface ' Violates rule
End Interface
End Namespace
using System;
namespace DesignLibrary
{
public interface IBadInterface // Violates rule
{
}
}
#include "stdafx.h"
using namespace System;
namespace Samples
{
// Violates this rule
public interface class IEmptyInterface
{
};
}