![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
666TEHb666 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 5.10.2008 Где: Новокузнецк Репутация: нет Всего: нет |
Здравствуйте,форумчане.
Возникла проблема с наследованием интерфейса Device классом Display. При наследовании передается метод Update,который нет необходимости реализовывать. Хотелось бы его не оставлять пустым аля public void Update {} . Пробежался по сайтам разным,в том числе и msdn. В msdn предлагается вполне реальная возможность с использованием абстрактного метода при наследовании. В идеале, если я пропишу в наследуемом классе public abstract void Update(); , то мои траблы будут решены. Сделал также, но компилятор ругается мол метод абстрактный в интерфейсе объявлен как неабстрактный. Как я понимаю нет смысла да и не получится объявить в интерфейсе метод абстрактным. Кто знает в чем проблема и как ее решить? Буду благодарен за помощь. И, если ошибка нелепая(где-то что-то упускаю),прошу извинить за отнятое время на просмотр этой темы и указать на нее. Код прилагаю:
Вот ссылка на схожий пример в msdn (там в самом низу примера схожая ситуация): http://msdn.microsoft.com/ru-ru/library/sf985hc5.aspx P.S. Проект будет большой и не хотелось бы в самом его начале создавать путаницу и мешанину. Так то,конечно можно было бы и оставить фиктивную реализацию метода как я сказал вначале этого сообщения. Если имеет какое-то значение,хотя наврядли, то пишу на Visual Studio Ultimate 2010 с лицензией, использую XNA 4. Еще раз благодарю за помощь заранее. |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
Если вам просто не нужна реализация и вы боитесь что кто-то Все-таки вызовет этот метод, то сделайте у нем выброс эксепшена типа throw new NotImplementedException() или NotSupportedException....
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
666TEHb666 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 5.10.2008 Где: Новокузнецк Репутация: нет Всего: нет |
jonie, Хмм..спасибо,учту. Думаю, если больше никто не сможет объяснить почему не работает сей задокументированный
![]() |
|||
|
||||
Экскалупатор |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
у меня студия ругается только в том случае если класс содержащий абстрактный метод сам является не абстрактным. но так все работает:
может я не совсем понял что имеется ввиду под "задокументированный smile мелкомягкими способ", но по ссылке ни о каких закупориваниях речь вроде не шла... Добавлено через 4 минуты и 51 секунду
|
||||||||
|
|||||||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
Мне не понятен ход действий.
Если реализовать метод не возможно (на этом уровне наследственной связи), но потомки его реализовать могут, то надо его объявить абстрактным и класс тоже абстрактным (при этом нельзя будет создать объект класса Монитор). Если класс Монитор должен быть инстанциирован, то метод нужно сделать виртуальным и реализовать его либо пустым либо с выбросом эксепшена как сказали выше (чтобы потомки могли его расширить) Нельзя объявить абстрактный метод в неабстрактном классе. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
может кстати имело бы смысл разделить интерфейс на несколько? более взаимосвязанных, что бы в каждом интерфейсе был необходимый минимум того что всегда обязан будет реализовывать наследник, что бы не возникало таких ситуаций при которых не нужна реализация.
|
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
Можно. Что-то типа IDevice и IUpdatableDevice.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
666TEHb666 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 5.10.2008 Где: Новокузнецк Репутация: нет Всего: нет |
Экскалупатор,neutrino, спасибо за ответы.
Действительно ошибся с объявлением абстрактных методов в неабстрактных классах. Сонный уже был и невнимательно мсдн читал видно. Скорее всего действительно разделю на 2 интерфейса. Еще раз спасибо. Вопрос решен. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |