Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интерфейсы и наследники абстрактного класса 
V
    Опции темы
uwannadie
Дата 9.12.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 5.6.2009
Где: Крым, Керчь

Репутация: нет
Всего: 1



осваиваю С#.
столкнулся с такой проблемой:
есть базовый абстрактный класс.
есть наследники от этого класса.
есть интерфейс.
проблема в том, что я чет не могу понять как прикрутить интерфейс к одному из наследников базового класса. в базовый прикрутить по-идее нельзя, т.к. он является абстрактным и не должен содержать реализованных методов.
обьясните пожайлуйста, как можно такое реализовать? желательно с простеньким примерчиком smile 

разобрался сам, вдумчиво почитав шилдта smile 
оказалось все элементарно
Код

class ExClass : BaseVirtualClass , ITestInterface 
{
 ...
}  


Это сообщение отредактировал(а) uwannadie - 9.12.2009, 18:47
--------------------
PM MAIL   Вверх
Экскалупатор
Дата 9.12.2009, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



это интерфейс не может содержать реализацию, а базовый(абстрактный) класс как раз может.

Это сообщение отредактировал(а) Экскалупатор - 9.12.2009, 20:31
PM MAIL ICQ   Вверх
uwannadie
Дата 9.12.2009, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 5.6.2009
Где: Крым, Керчь

Репутация: нет
Всего: 1



Цитата(Экскалупатор @ 9.12.2009,  20:14)
это интерфейс не может содержать реализацию, а базовый(абстрактный) класс как раз может.

если мне не изменяет память, то абстрактный класс содержит лишь прототипы свойств, методов и событий, а реализуются они уже непосредственно в классах-наследниках
--------------------
PM MAIL   Вверх
Экскалупатор
Дата 9.12.2009, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



uwannadie, изменяет. абстрактный класс может содержать реализацию.
пример:
Код

abstract class Base
    {
        abstract public void metod1();

        public string metod2(string str)
        {
            return str;
        }
    }


class chaild : Base
    {
        public override void metod1()
        {
            Console.WriteLine("переопределенный метод1");
        }
    }


при создании объекта класса chaild будут доступны оба метода и оба будут работать.
PM MAIL ICQ   Вверх
uwannadie
Дата 9.12.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 5.6.2009
Где: Крым, Керчь

Репутация: нет
Всего: 1



мда, наворотили они в шарпе ###...
--------------------
PM MAIL   Вверх
Экскалупатор
Дата 9.12.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



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

да, кстати, есть еще одно различие. класс не может наследовать несколько абстрактных классов, но может наследовать несколько интерфейсов.

Это сообщение отредактировал(а) Экскалупатор - 9.12.2009, 21:56
PM MAIL ICQ   Вверх
Jamon
Дата 11.12.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 1.9.2007

Репутация: нет
Всего: нет



мне кажется, можно объяснить проще - интерфейс показывает _поведение_  класса, который реализует этот интерфейс.  Не зря некоторые стандартные интерфейсы называются с окончанием ...able (IComparable - "Способный сравниваться", IEnumerable - "Способный перечисляться" и т.п.)

Это сообщение отредактировал(а) Jamon - 11.12.2009, 16:22
PM MAIL   Вверх
uwannadie
Дата 12.12.2009, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 5.6.2009
Где: Крым, Керчь

Репутация: нет
Всего: 1



я разницу знаю между абстрактным классом и интерфейсом, да и вобще между классами и интерфейсами.
просто я перехожу постепенно с делфей. а там это реализовано немного иначе.
--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0755 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.