|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
Есть класс. Хочу получить такой же класс, только с другой функциональностью геттеров. Но чтобы всё остальное, включая логику сеттеров, уведомления об изменении свойств (INotifyPropertyChanged) и прочие навороты работали как в старом классе. Искал, думал - придумал пока только такой вариант. Проверил - вроде, работает так, как мне надо. Но это на простом примере, без наворотов. Покритикуйте - плохой дизайн там или ещё чего. Может, есть способ лучше решить такую задачу? Т. е. идея в том, что в моём подходе при наследовании надо переписать только геттер, а всё остальное (сеттеры со сложной логикой, INotifyPropertyChanged и пр.) придёт само только за счёт наследования. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 07:07 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
Да, результат работы проги 10 1 10 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 07:08 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
user7320, почему свойству задаётся значение 2, а оно возвращает 10? В чём смысл такого поведения? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 09:36 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
skyANAuser7320, почему свойству задаётся значение 2, а оно возвращает 10? В чём смысл такого поведения? Да, я бы тоже был сильно удивлен таким. Что же до вопроса топика - чего ж здесь сложного? логику геттера помещаем в виртуальный метод, в самом геттере возращаем результат выполнения этого метода, и в классе-наследнике этот виртуальный метод переопределяем. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 10:03 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, для начала бы хотелось понять, зачем вообще класс-наследник нужен. А то понадобиться ТС возвращать 20, он будет походу класс C лепить ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 10:51 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
skyANAuser7320, почему свойству задаётся значение 2, а оно возвращает 10? В чём смысл такого поведения? Я хотел сделать модель представления, которая должна для одних представлений возвращать одни значения, а для других - другие. Скажем, в одном месте показывать картинку-заглушку, обозначающую, что картинка не задана, а в другом - пустое место (картинка же не задана). Сначала я всё сделал на одной модели представления, только с конвертерами - где надо, конвертер возвращал картинку-заглушку, вместо того, чтобы оставить в привязке пустое место. Но потом я вычитал, что помещать такую логику в конвертеры - дурной тон. И что такая логика должна быть в моделях представления. И действительно, подумал я, чего это конвертер выполняет какую-то логику модели представления, когда он относится к представлению. Ну и поместил эту логику в модель представления. Т. е. базовая модель представления у меня показывает картинку или пустое место - в зависимости от того, есть ли картинка, а специальная модель представления, нужная в специальном месте, показывает заглушку, обозначающую, что картинка не задана. Сон Веры ПавловныskyANAuser7320, почему свойству задаётся значение 2, а оно возвращает 10? В чём смысл такого поведения? Да, я бы тоже был сильно удивлен таким. Что же до вопроса топика - чего ж здесь сложного? логику геттера помещаем в виртуальный метод, в самом геттере возращаем результат выполнения этого метода, и в классе-наследнике этот виртуальный метод переопределяем. Это тоже вариант. А это лучше или хуже моего варианта? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 11:06 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
skyANAСон Веры Павловны, для начала бы хотелось понять, зачем вообще класс-наследник нужен. А то понадобиться ТС возвращать 20, он будет походу класс C лепить Такой пример в возвратом 10 - для простоты. На самом деле мне просто нужна другая логика в геттере (или сеттере - не важно), но вся остальная функциональность должна остаться та же. Понимаете? Просто хочу другой геттер, но всё остальное такое же. Просто в Сишарпе такое ограничение, что нельзя отдельно геттеры или сеттеры переписывать в наследуемых классах - только целиком свойства. Поэтому люди и выкручиваются через методы, вызываемые геттерами-сеттерами или через вот такое, как у меня. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 11:09 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
user7320Я хотел сделать модель представления, которая должна для одних представлений возвращать одни значения, а для других - другие. Скажем, в одном месте показывать картинку-заглушку, обозначающую, что картинка не задана, а в другом - пустое место (картинка же не задана).Не проще описать эту логику в View с помощью триггеров? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 12:04 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
user7320Покритикуйте - плохой дизайн там или ещё чего. Может, есть способ лучше решить такую задачу? понимаешь разницу между overload и override ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 12:39 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Я хотел сделать модель представления, которая должна для одних представлений возвращать одни значения, а для других - другие. Скажем, в одном месте показывать картинку-заглушку, обозначающую, что картинка не задана, а в другом - пустое место (картинка же не задана).Не проще описать эту логику в View с помощью триггеров? Например? Я вначале пользовался конвертерами (и всё работало, как мне надо) - тоже "логика во вью". Решил отказаться от "логики во вью" по идеологическим соображениям. pationuser7320Покритикуйте - плохой дизайн там или ещё чего. Может, есть способ лучше решить такую задачу? понимаешь разницу между overload и override ? Первое - метод с тем же названием, но другой остальной частью сигнатуры. Например. А второе - при полностью совпадающей сигнатуре в унаследованных классах. Например. А что? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 12:56 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
user7320Алексей Кпропущено... Не проще описать эту логику в View с помощью триггеров? Например? Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
user7320Я вначале пользовался конвертерами (и всё работало, как мне надо) - тоже "логика во вью". Решил отказаться от "логики во вью" по идеологическим соображениям .Ещё одна жертва информационной войны! :-) Меньше читай "классику" ... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 13:32 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
Алексей Кuser7320пропущено... Например? Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Спасибо, гляну. Здесь уже другая классика и авторитеты . Видите, какие там тысячники мнения имеют? Ну и я согласен с ними - конвертеры относятся к представлениям, а логику надо в моделях размещать. Другой вопрос, а к представлениям ли относятся конвертеры? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 14:29 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
user7320Здесь уже другая классика и авторитеты . Видите, какие там тысячники мнения имеют? Ну и я согласен с ними - конвертеры относятся к представлениям, а логику надо в моделях размещать. Другой вопрос, а к представлениям ли относятся конвертеры?В модели должна быть логика предметной области. В представлении - логика представления. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 14:42 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Здесь уже другая классика и авторитеты . Видите, какие там тысячники мнения имеют? Ну и я согласен с ними - конвертеры относятся к представлениям, а логику надо в моделях размещать. Другой вопрос, а к представлениям ли относятся конвертеры?В модели должна быть логика предметной области. В представлении - логика представления. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Я имел ввиду модель представления, конечно же. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 15:31 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
И это... насколько я знаю, писать логику в представлении - а конкретно, в XAML - это возникло из идеи "не давать дизайнерам смотреть код". По-моему, самое место для логики представления - не замл, не конвертеры, а так называемый код поддержки, т. е. класс представления. В замле что-то там кодить - это было сделано для удобства дизайнеров, чтобы они конвертацию ту же не в коде писали, а в разметке. В конвертерах - та же шняга, только теперь конвертацию дизигнерам прогеры сделали, а они нужный конвертер выбирают. Всё это плохо, потому что ради удобства вносится бардак, хаос. Теперь код представления и, частично, модели представления разнесён по четырём местам: моделям представления; конвертерам; разметке; классам представления. И каждый хреначит в соответствии со своей "религией" - как он видит, где должен быть код. У некоторых прямо во всех этих местах и разбросано всё - задолбаешься искать, где у него там что куда конвертится. А вот если бы дизигнерам не подлизывали и всё строго в одном месте требовали бы размещать (ну, в двух - в модели представления и в классе представления-коде поддержки), то было бы больше порядка. Аналогия подобного говна в ХТМЛ - когда в добавок к джаваскрипту добавили возможность писать некоторую логику в стилях. А джаваскрипт вознесли вплоть до серверов. ИДИОТЫ! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 15:42 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
user7320Я имел ввиду модель представления, конечно же.Модель представления, мне кажется, не должна содержать логики. Она нужна как "переходник", для сращивания модели и представления, если представление с моделью в таком виде работать не может. В ней только делегирование и преобразование. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 15:49 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
user7320pationпропущено... понимаешь разницу между overload и override ? Первое - метод с тем же названием, но другой остальной частью сигнатуры. Например. А второе - при полностью совпадающей сигнатуре в унаследованных классах. Например. А что? не совсем правильно, ты getter хочешь оверрайдить или оверлоадить? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 15:51 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
user7320Аналогия подобного говна в ХТМЛ оффтоп, этот срач в соседнем форуме ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 15:52 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
user7320По-моему, самое место для логики представления - не замл, не конвертеры, а так называемый код поддержки, т. е. класс представления.Всему своё место. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 15:54 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Я имел ввиду модель представления, конечно же.Модель представления, мне кажется, не должна содержать логики. Она нужна как "переходник", для сращивания модели и представления, если представление с моделью в таком виде работать не может. В ней только делегирование и преобразование. Ну, это зависит от того, что понимать под "логикой". И это зависит от проекта. В больших проектах столько разных слоёв и так всё наворочено, что и на модель представления может немало логики перепасть. Под логикой представления я подразумеваю всякие конвертеры-преобразователи, кнопочки подвигать (анимации) и прочие вещи, относящиеся к интерфейсу. Под логикой модели представления я понимаю вот это ваше "переходник". В некоторых случаях переходник может быть очень даже нагружен. Я уже приводил пример - в модели только идентификатор, а в модели представления текстура (картинка), геометрия (вершины, полигоны и пр.) и прочие визуальные атрибуты. И только под логикой модели я собственно подразумеваю логику предметной области (бизнес-логику или как хотите это назовите - я это не различаю). pationuser7320пропущено... Первое - метод с тем же названием, но другой остальной частью сигнатуры. Например. А второе - при полностью совпадающей сигнатуре в унаследованных классах. Например. А что? не совсем правильно, ты getter хочешь оверрайдить или оверлоадить? Оверрайдить через оверлоад. Я хочу переписать код геттера. Но сделать это можно только через оверлоад всего свойства - т. е. и геттера в том числе. Таковы ограничения Сишарпа. Изопропилuser7320Аналогия подобного говна в ХТМЛ оффтоп, этот срач в соседнем форуме Джаваскрипт всегда уместно и вовремя поругать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 16:03 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
user7320Под логикой модели представления я понимаю вот это ваше "переходник". В некоторых случаях переходник может быть очень даже нагружен. Я уже приводил пример - в модели только идентификатор, а в модели представления текстура (картинка), геометрия (вершины, полигоны и пр.) и прочие визуальные атрибуты."Как хотите это назовите - я это не различаю" (ц) Это такая же модель, как и все остальные. Просто она расположена локально, а не в, например, вебсервисе. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 16:08 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
user7320 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Как то так надо. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 16:26 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
Я вообще не пойму, зачем разделили понятия Model и ViewModel. Мне кажется, достаточно одного понятия Model. ViewModel только добавляет путаницу. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 16:28 |
|
Переписать только геттер при наследовании
|
|||
---|---|---|---|
#18+
ЕвгенийВuser7320 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Как то так надо. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Так по сути это то же самое? Я, кстати, не понимаю, в чём разница между парой "virtual-override" и "new". New вроде как просто убирает предупреждение компилятора - типа, прогер сознательно скрыл метод или свойство базового класса, а не по ошибке. Алексей КЯ вообще не пойму, зачем разделили понятия Model и ViewModel. Мне кажется, достаточно одного понятия Model. ViewModel только добавляет путаницу. Я же приводил пример с идентификаторами и картинками. Вот тем, у тех, у кого нет такой специфики - действительно, у них М и ВМ выглядят одинаково и ВМ так кажется лишним слоем. Для простых приложений и не надо выдумывать всякие МВВМ. А вот напишите Офис - там ещё и не такое придумаете. Некоторые вообще аспектно-ориентированное программирование любят. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2014, 16:47 |
|
|
start [/forum/topic.php?fid=20&msg=38623280&tid=1402958]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
127ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 244ms |
0 / 0 |