Поделиться через


Избегайте пустых интерфейсов

Обновлен: Ноябрь 2007

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    
    {    
    };
}