| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Наследование от интерфейса |
| Автор: 666TEHb666 19.11.2010, 19:38 | ||
| Здравствуйте,форумчане. Возникла проблема с наследованием интерфейса 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 19.11.2010, 21:25 |
| Если вам просто не нужна реализация и вы боитесь что кто-то Все-таки вызовет этот метод, то сделайте у нем выброс эксепшена типа throw new NotImplementedException() или NotSupportedException.... |
| Автор: 666TEHb666 19.11.2010, 23:10 |
| jonie, Хмм..спасибо,учту. Думаю, если больше никто не сможет объяснить почему не работает сей задокументированный |
| Автор: neutrino 20.11.2010, 00:23 |
| Мне не понятен ход действий. Если реализовать метод не возможно (на этом уровне наследственной связи), но потомки его реализовать могут, то надо его объявить абстрактным и класс тоже абстрактным (при этом нельзя будет создать объект класса Монитор). Если класс Монитор должен быть инстанциирован, то метод нужно сделать виртуальным и реализовать его либо пустым либо с выбросом эксепшена как сказали выше (чтобы потомки могли его расширить) Нельзя объявить абстрактный метод в неабстрактном классе. |
| Автор: Экскалупатор 20.11.2010, 00:35 |
| может кстати имело бы смысл разделить интерфейс на несколько? более взаимосвязанных, что бы в каждом интерфейсе был необходимый минимум того что всегда обязан будет реализовывать наследник, что бы не возникало таких ситуаций при которых не нужна реализация. |
| Автор: neutrino 20.11.2010, 00:41 |
| Можно. Что-то типа IDevice и IUpdatableDevice. |
| Автор: 666TEHb666 21.11.2010, 15:41 |
| Экскалупатор,neutrino, спасибо за ответы. Действительно ошибся с объявлением абстрактных методов в неабстрактных классах. Сонный уже был и невнимательно мсдн читал видно. Скорее всего действительно разделю на 2 интерфейса. Еще раз спасибо. Вопрос решен. |