OO основы вопрос о делегате против наследования против интерфейса - PullRequest
1 голос
/ 06 июля 2011

Несколько лет назад у меня был курс об ОО, где было сделано заявление.Я забыл это утверждение и хотел бы получить некоторую помощь, чтобы вернуть его в память.

Это было одно из следующих действий:

  1. Все, что вы можете сделать с помощью интерфейса, также можно сделать с помощьюделегат
  2. Все, что вы можете сделать с помощью интерфейса, также можно сделать с помощью наследования
  3. Все, что вы можете сделать с помощью наследования, можно также сделать с помощью интерфейса
  4. Все, что вы можете сделать с помощьюнаследование также может быть сделано с делегатом

Я знаю, что он один из них, и что 1 обязательно будет полностью недействительным

Не могли бы вы пролить свет на это?

Ответы [ 3 ]

2 голосов
/ 06 июля 2011

Я согласен с IAbstract - делегаты не имеют ничего общего с наследованием или интерфейсами, поэтому я не думаю, что какое-либо из утверждений применимо.

На мой взгляд, # 2 - правильный ответ. Интерфейс предоставляет набор методов, свойств и событий, которые должен содержать реализующий класс. Вы получаете это по умолчанию с наследованием: все не приватные свойства, методы и события суперкласса доступны для подкласса.

Наследование предоставляет детали реализации (тело метода) подклассу, тогда как интерфейс - нет; это только обеспечивает то, что будет доступно в данном классе. Вот почему я не считаю № 3 правильным.

1 голос
/ 06 июля 2011

Во-первых, делегаты на самом деле не имеют ничего общего с наследованием или интерфейсами - поэтому я бы исключил 1 и 4.

Во-вторых, учтите, что interface - это одно из следующего:

abstract class SomeInterface {
/*.. do stuff ..*/ 
}

... или

interface ISomeInterface {
/*.. do stuff ..*/ 
}

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

0 голосов
/ 10 февраля 2012

Вы пометили вопрос как C #, на который я могу ответить.Но то, как реализуются делегаты, наследование и интерфейсы, может существенно различаться в разных языках, поэтому я не уверен, насколько полезны абстрактные утверждения об ОО.

"Проблема, которую можно решить с помощью делегата, также может бытьрешено с помощью интерфейса. "-C # 4.0 В интерфейсе руководства по программированию MSDN NutShell

против делегата

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

Все, что вы можете делать на языке высокого уровня, которое вы можете делать в ассемблере, но это может оказаться практически бесполезным, если вы обеспокоеныпроизводительность.

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