Почему мы используем интерфейс без членов? - PullRequest
7 голосов
/ 17 марта 2009

Какой смысл писать интерфейс без участников?

INamingContainer является одним примером в .NET Framework. И это описано в MSDN как:

Идентифицирует элемент управления контейнера, который создает новое пространство имен идентификатора в Иерархия управления объектом страницы. это только интерфейс маркера.

Используется ли он только для таких блоков:

if (myControl is INamingContainer)
{
    // do something
}

Или есть другие преимущества?

РЕДАКТИРОВАТЬ: Он назывался Шаблон интерфейса маркера (спасибо Preet)

Ответы [ 4 ]

10 голосов
/ 17 марта 2009

Интерфейсы без элементов используются для обеспечения смешанных возможностей в C #. Итак, учитывая класс A:

class A : B { ... }

Вы можете дать ему дополнительную функциональность (а-ля множественное наследование), определив интерфейс IStuff:

interface IStuff {}

затем «внедряем» его в A:

class A : B, IStuff { ... }

и добавление дополнительных функций

class Methods {
  public static void Something(this IStuff stuff) {
    // some functionality here
  }
}
8 голосов
/ 17 марта 2009

Это интерфейс маркера. Его можно использовать для украшения типов, чтобы вы могли выяснить, что тип является правильным во время выполнения без использования отражения. мы используем его для проверки правильности универсальных типов в вызываемом абоненте.

8 голосов
/ 17 марта 2009

Это необходимо для того, чтобы вы могли обрабатывать коллекцию объектов как один и тот же тип, а затем выполнять некоторые операции над этим типом (вы знаете, что он должен наследоваться от объекта).

Думай об этом как об атрибутах. Это тип метаданных.

Вы также можете захотеть выполнить операцию с известным типом (например, System.Web.UI.Control), но выполнять эту операцию, только если тип наследуется от определенного интерфейса (например, INamingContainer).

foreach(var ctrl in this.Controls)
{
    if (ctrl is INamingContainer)
    {
        // Do something on the control
    }
}
3 голосов
/ 17 марта 2009

Чтобы сбить с толку питонистов, которые думают, что печатать утку - это круто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...