Как вы это называете, когда один интерфейс «наследует» от другого? - PullRequest
43 голосов
/ 30 апреля 2009

Если у меня есть класс B: A {}

Я говорю, что "класс B унаследован класс A" или "класс B происходит от класса A".

Однако, если у меня вместо этого есть:

  class B : ISomeInterface   {}

неправильно говорить «B наследует ISomeInterface» - правильный термин - «B реализует ISomeInterface».

Но, скажем, у меня есть

  interface ISomeInterface : ISomeOtherInterface   {}

Теперь все еще неправильно говорить «наследует», но сейчас так же неправильно говорить «реализует», поскольку ISomeInterface ничего не реализует.

Итак, как вы называете эти отношения?

Ответы [ 6 ]

58 голосов
/ 30 апреля 2009

Я лично говорю «расширяет», и я думал, спецификация C # также где-то использует это слово (к сожалению, я не могу его сейчас найти) - но я помню, как Эрик Липперт говорил, что он не был заинтересован на нем и хотел поменять его на 4.0.

Я думаю, что это хорошо, потому что это показывает, что вы продлеваете контракт, указанный в исходном интерфейсе.

РЕДАКТИРОВАТЬ: Посмотрев на 3.0 спецификации ...

Спецификация обходит проблему в разделе 13.2. Это говорит о членах, унаследованных от базовых интерфейсов. В нем говорится об одном классе , расширяющем другой, но не об интерфейсах

РЕДАКТИРОВАТЬ: В спецификации C # 5, раздел 13.1.4, он использует наследует:

Интерфейс может наследовать от нуля или более типов интерфейса

Так что это, вероятно, лучший термин для использования.

7 голосов
/ 04 февраля 2010

Обычно я называю это чрезмерным трудоемкостью.

7 голосов
/ 30 апреля 2009

Я называю это "расширяет".

6 голосов
/ 09 апреля 2014

В качестве авторитетного источника и в случае, если вам нужна полезная цитата, я наткнулся на информацию о MSDN , которая описывает " наследование интерфейса " на практическом примере структуры наследования интерфейса для ComboBox, Control, Listbox и TextBox:

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

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

Пример:

interface IControl
{
   void Paint();
}
interface ITextBox: IControl
{
   void SetText(string text);
}
interface IListBox: IControl
{
   void SetItems(string[] items);
}
interface IComboBox: ITextBox, IListBox {}

Источник:

http://msdn.microsoft.com/en-us/library/aa664578%28VS.71%29.aspx

2 голосов
/ 30 апреля 2009

Почему было бы неправильно говорить, что InterfaceB «наследует» или «происходит от» InterfaceA? «Реализует» было бы неправильно, потому что InterfaceB не обеспечивает реализацию. Семантически, производные интерфейсы очень похожи на производные классы. Например, C ++ вообще не различает интерфейсы и классы.

1 голос
/ 30 апреля 2009

у вас неверное определение.

B: A означает «B наследует от A».

когда мы говорим «B реализует InterfaceA», это обычно означает, что InterfaceA не имеет определения для функционирования - это всего лишь прототипы (или PURE в C ++). Однако в C ++ и большинстве OOPL наследуют и реализуют одинаковый синтаксис.

Итак, InterfaceB: InterfaceA по-прежнему означает «InterfaceB наследует InterfaceA».

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