![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 2 Всего: 18 |
Есть вот такая вот схема классов
А её вот код
Вопрос в том, как сделать правильной архитектуру классов. Все наследники ManagerBase, имеют поле Info одного из наследников InfoBase. Если в классе ManagerBase, определить поле Info типа InfoBase, то в его наследниках придётся определять ключевое слово new, что собственно говоря, мне кажется не очень хорошей идеей. Но все же, хотелось бы, чтобы класс наследник ManagerBase обязательно имел поле поле Info одного из наследников InfoBase. Как реализовать? Это сообщение отредактировал(а) Rohoss - 25.9.2009, 13:56 |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
вся фишка наследования и полиморфизма в том, чтобы не думать, экземляр какого именно класса сейчас используется
если наследники InfoBase действительно настолько специфичны, что предполагается их использовать по-разному, и очень уж хочется обязатать всех манагеров его иметь, то что тогда мешает завести в абстрактном манагере св-во public abstract InfoBase InfoBase { get; }; а в конктретных классах определить ещё одно св-во с нужным типом через каст public InfoB { get { return (InfoB) InfoBase; } } только вот это хоть как-то с оттенком приличности будет смотреться, если причина использования наследования лишь в выносе общего кода, если же хочется работать единообразно с манагерами, то выглядеть будет очень мрачно и тоскливо в общем, есть подозрение, что наследование здесь либо притянуто за уши, либо плохо спроектировано (т.е. проблема не в том, как сделать св-во, а ещё раньше) Это сообщение отредактировал(а) mihryak - 25.9.2009, 14:35 |
|||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 2 Всего: 18 |
mihryak, я ведь не о свойствах, а о полях говорю. Хотя, если вы предложите отличный вариант со свойствами, будет гуд Чёт я не понял, что это?
что - то вроде того вот как раз и проектирую |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
В менеджербэйз создаёшь поле инфобэйз и всё. Ему можно будет присваивать экземпляры любого класса, унаследованного от инфобэйз.
Или так
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 2 Всего: 18 |
Ну так я могу сделать поле типа object, и туда тоже будет можно присваивать, но потом, когда буду работать с ним, нужно будет использовать приведение типов. Такой вариант не особо нравится. А вот второй вариант отличный, спасибо! |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Если тип инфобэйз - чисто номинальный, то - да. Но если в нём уже присутствует некотороя функциональность, присущая всем типам этого семейства, тогда - не да -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |