Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > Интерфейсы и наследники абстрактного класса |
Автор: uwannadie 9.12.2009, 17:45 | ||
осваиваю С#. столкнулся с такой проблемой: есть базовый абстрактный класс. есть наследники от этого класса. есть интерфейс. проблема в том, что я чет не могу понять как прикрутить интерфейс к одному из наследников базового класса. в базовый прикрутить по-идее нельзя, т.к. он является абстрактным и не должен содержать реализованных методов. обьясните пожайлуйста, как можно такое реализовать? желательно с простеньким примерчиком ![]() разобрался сам, вдумчиво почитав шилдта ![]() оказалось все элементарно
|
Автор: Экскалупатор 9.12.2009, 20:14 |
это интерфейс не может содержать реализацию, а базовый(абстрактный) класс как раз может. |
Автор: uwannadie 9.12.2009, 20:58 | ||
если мне не изменяет память, то абстрактный класс содержит лишь прототипы свойств, методов и событий, а реализуются они уже непосредственно в классах-наследниках |
Автор: Экскалупатор 9.12.2009, 21:34 | ||
uwannadie, изменяет. абстрактный класс может содержать реализацию. пример:
при создании объекта класса chaild будут доступны оба метода и оба будут работать. |
Автор: uwannadie 9.12.2009, 21:44 |
мда, наворотили они в шарпе ###... |
Автор: Экскалупатор 9.12.2009, 21:54 |
почему? по моему все логично. иначе какой смысл было бы делать такую штуку как интерфейс? а так есть интерфейс, который не может содержать реализацию, и наследование интерфейса не создает (как бы сказать) структуры, т.е. мы фактически ничего не наследуем, при наследовании интерфейса, кроме того какие методы должны быть в классе наследнике. т.е. это как контракт который должен подписать класс наследник, для того что его можно было использовать везде где используется этот интерфейс. при этом сама реализация этих методов интерфейс не навязывает, а абстрактный класс напротив, может содержать часть общей реализации своих потомков, и по этому его наследование каждый раз дает потомка этого класса который наследует реализацию предка, и переопределяет для себя некоторые его методы(т.е. получаем структуру классов в результате). т.е. наследую интерфейс мы каждый раз должны переопределять все его методы, а наследую абстрактный класс только ту часть которая нужна нам. как то так я себе это все представляю. может кто по лучше объяснит. да, кстати, есть еще одно различие. класс не может наследовать несколько абстрактных классов, но может наследовать несколько интерфейсов. |
Автор: Jamon 11.12.2009, 14:30 |
мне кажется, можно объяснить проще - интерфейс показывает _поведение_ класса, который реализует этот интерфейс. Не зря некоторые стандартные интерфейсы называются с окончанием ...able (IComparable - "Способный сравниваться", IEnumerable - "Способный перечисляться" и т.п.) |
Автор: uwannadie 12.12.2009, 02:41 |
я разницу знаю между абстрактным классом и интерфейсом, да и вобще между классами и интерфейсами. просто я перехожу постепенно с делфей. а там это реализовано немного иначе. |