Как вы это называете, когда один интерфейс «наследует» другой?

StackOverflow https://stackoverflow.com/questions/807217

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Я говорю, что «Класс Б унаследованный класс А» или «класс Б происходит от класса А».

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

  class B : ISomeInterface   {}

неправильно говорить «B наследует ISomeInterface» — правильнее сказать «B реализует ISomeInterface».

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

  interface ISomeInterface : ISomeOtherInterface   {}

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Другие советы

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

Обычно я называю это сверхинжинирингом.

Как авторитетный источник и если вам нужна полезная цитата, я наткнулся информация на 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

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

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

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

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

Итак, ИнтерфейсB:Интерфейс A по-прежнему означает «Интерфейс B наследует Интерфейс А».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top