|
Пустой базовый абстрактный класс
|
|||
---|---|---|---|
#18+
Гуд? Бэд? А то на всяких StackOverflow пишут, что для С++ это бэд, т. к. там какие-то свои заморочки и пустые классы ничего не дают (или это про интерфейсы? - не понял, короче). Т. е. вообще пустой Код: c# 1. 2. 3.
Мне надо метод, который бы возвращал потомки этого класса. Но не хочу перегружать метод с однотипной логикой. В самом методе, конечно, будет что-то типа свича по выбору конкретного потомка для возврата. Клиент тоже будет знать, какой тип ему на самом деле пришёл (на крайний случай GetType() поможет). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2015, 13:40 |
|
Пустой базовый абстрактный класс
|
|||
---|---|---|---|
#18+
что мешает в таком случаи использовать класс object? вы создаете пустой класс, который наследует object, то есть, по сути от object он кроме как иминенем ни чем не отличается и полностью его наследует. Только если как ограничение использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2015, 13:45 |
|
Пустой базовый абстрактный класс
|
|||
---|---|---|---|
#18+
еще как вариант - использовать пустой маркерный интерфейс: Код: c# 1.
По сути практически то же самое. Смысл использования - создание своей иерархии, generic constraints. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2015, 13:48 |
|
Пустой базовый абстрактный класс
|
|||
---|---|---|---|
#18+
Сон Веры Павловныеще как вариант - использовать пустой маркерный интерфейс: Код: c# 1.
По сути практически то же самое. Смысл использования - создание своей иерархии, generic constraints. В классе точно не будет логики. Всё равно интерфейс? - У меня это будет типа DTO. Roman Mejtesчто мешает в таком случаи использовать класс object? вы создаете пустой класс, который наследует object, то есть, по сути от object он кроме как иминенем ни чем не отличается и полностью его наследует. Только если как ограничение использовать. В принципе, можно. Но если я захочу таки наполнить данными этот базовый класс в будущем - лучше создать свой пустой сразу? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2015, 14:24 |
|
Пустой базовый абстрактный класс
|
|||
---|---|---|---|
#18+
Alexey2112В принципе, можно. Но если я захочу таки наполнить данными этот базовый класс в будущем - лучше создать свой пустой сразу? Ну, потом вводить базовые классы это редкостный геморой и говорит о том, что нужно заранее о таких вещах думать. особенно, когда наколбасил уже 100500 строк кода. не думаю, что этот пустой базовый класс как то скажется на производительности или чем то еще. Зато будет удобно работать с Generic классами. Такие вещи даже в WPF встречаются, просто пустые абстрактные классы наследующие базовые классы Visual или DO и т.д. на вскидку название не дам, но когда копаешься в этом говне и не такое можно встретить :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2015, 14:39 |
|
Пустой базовый абстрактный класс
|
|||
---|---|---|---|
#18+
Alexey2112В классе точно не будет логики. Всё равно интерфейс? - У меня это будет типа DTO. У интерфейсов перед классами отличие в возможности их комбинирования (множественная реализация интерфейсов). Плюс интерфейс может реализовывать структура. Если вам эти моменты неважны, то разницы между пустым интерфейсом и пустым классом никакой. Можно подкинуть пятак, чтобы определиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2015, 14:47 |
|
Пустой базовый абстрактный класс
|
|||
---|---|---|---|
#18+
Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2015, 15:42 |
|
Пустой базовый абстрактный класс
|
|||
---|---|---|---|
#18+
Ну вот и придумалось, зачем заюзать свой базовый класс. Хочу при возврате потомков иметь признак, что есть что возвращать. Например, возвращаю результаты разного кастомного типа. Но нужен признак, что новых результатов нет и возвращать нечего. При этом в методе только один тип возврата - базовый тип результата. Всякие out bool isNewResultExist в параметрах метода использовать не хочу. Есть вариант приделать подобное поле isNewResultExist в базовый класс. Тогда клиент получает результат, в первую очередь читает это поле и, если оно тру, то приводит базовый результат к конкретному потомку и далее с ним работает. Или всё же лучше аналог паттерна "try parse" (что-то типа TryGet Results)? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2015, 06:08 |
|
Пустой базовый абстрактный класс
|
|||
---|---|---|---|
#18+
Есть ещё вариант возвращать null. Но: 1) как это будет работать с WCF и прочими местами, где есть сериализация? 2) придётся на клиенте заюзать проверку на null, что неинформативно - почему результат == null? потому, что новых результатов нет, или что-то случилось в расчёте, в канале связи и прочее, что результаты потерялись? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2015, 06:10 |
|
Пустой базовый абстрактный класс
|
|||
---|---|---|---|
#18+
Минус паттерна "try get" вижу в том, что к нему почти наверняка нужен ещё и просто метод Get - т. е. надо городить два метода, и ещё объяснять, зачем нужен один и второй. Логика с булевым полем в базовом классе как-то проще и понятнее мне видится. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2015, 06:12 |
|
|
start [/forum/topic.php?fid=20&msg=39013512&tid=1401340]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 146ms |
0 / 0 |