|
|
|||||||||||
.NET 4.x Как получить свойство класса?13.06.2017, 22:23. Показов 6615. Ответов 101
Метки нет (Все метки)
В продолжении темы визитора
Есть, к примеру, вот такой код:
0
|
|||||||||||
| 13.06.2017, 22:23 | |
|
Ответы с готовыми решениями:
101
Как поместить свойство класса типа Enum в конструктор Можно ли как-то получить из одного класса исходный код другого класса? |
|
|
||||||
| 13.06.2017, 23:01 | ||||||
Сообщение было отмечено skilllab как решение
Решение
skilllab, Если вопрос только в том, как прикрутить визитор, то вот так:
0
|
||||||
|
|
|||||||||||
| 13.06.2017, 23:21 [ТС] | |||||||||||
|
Storm23, это тогда получается, что если вдруг добавляется свойство в класс (не в интерфейс), то мне это свойство и в классе визитора описывать? Т.е. в визиторе должны быть все свойства, которые НЕ описаны в интерфейсе? Ну, специфичные для классов.
Т.е.
0
|
|||||||||||
|
|
||
| 14.06.2017, 00:15 | ||
|
Ну по другому и быть не может. Вы же сами ставите задачу: получить свойства. Естественно, где-то должен быть код который будет это свойство получать и хранить.
0
|
||
|
|
||
| 14.06.2017, 09:01 | ||
Сообщение было отмечено skilllab как решение
Решение1) Семантически все классы являются животными, а значит логично наследовать от Animal. Интерфейсы же применяются для описания того, что класс поддерживает определенную функциональность. 2) Мне влом реализовывать одно и то же свойство Name 100500 раз в каждом классе. 3) Не нужно плодить интерфейсы на каждый чих. Будьте проще. Понадобятся интерфейсы - сделаете через интерфейс. Пока в вашем коде я не вижу надобности в интерфейсах. Это же касается и класса Visitor.
1
|
||
|
14314 / 9398 / 1355
Регистрация: 21.01.2016
Сообщений: 35,431
|
||
| 14.06.2017, 11:05 | ||
|
0
|
||
|
14314 / 9398 / 1355
Регистрация: 21.01.2016
Сообщений: 35,431
|
|
| 14.06.2017, 11:13 | |
|
skilllab, вам же уже раз пять или шесть было показано КАК.
0
|
|
|
|
||
| 14.06.2017, 11:28 [ТС] | ||
|
Usaga, ну да, выше и показано. Тогда что именно вы спрашиваете?
![]() Добавлено через 4 минуты Не по теме: Всего лишь как установить свойство (не общее для всех классов) в конкретном одном классе (найденном к примеру по свойству "Имя") при этой пробежке если классов Dog штук 100, + классов Cat кучка + классов Cow штук 10
0
|
||
|
14314 / 9398 / 1355
Регистрация: 21.01.2016
Сообщений: 35,431
|
|||
| 14.06.2017, 11:42 | |||
|
skilllab, у вас в визитёр передаётся ссылка на текущий класс (Dog, Cow или Cat). Соответственно, визитёр имеет полный доступ к открытым полям\свойствам\методам данного класса. В таком методе вы вольны делать всё что захотите.
![]()
0
|
|||
|
|
||||||||||||||||
| 14.06.2017, 12:06 [ТС] | ||||||||||||||||
Я ж написал - это теперь понятно.
имя_свойства и устанавливаем значение как значение_свойства.В случае возврата значения, делаем
Добавлено через 1 минуту
0
|
||||||||||||||||
|
14314 / 9398 / 1355
Регистрация: 21.01.2016
Сообщений: 35,431
|
||
| 14.06.2017, 12:13 | ||
|
skilllab, в визит не нужно ничего передавать, кроме ссылки на сам объект. Вся логика должна крыться в методе, который будет перевызван. Если всё сложно, то такую логику можно поместить в отдельный класс визитёра.
0
|
||
|
|
||||||
| 15.06.2017, 00:34 [ТС] | ||||||
|
Насколько такая конструкция будет быдлокод?
![]()
0
|
||||||
|
14314 / 9398 / 1355
Регистрация: 21.01.2016
Сообщений: 35,431
|
|
| 15.06.2017, 04:43 | |
|
skilllab, это трындец, а не быдлокод. По сравнению с этим, решение использовать IS - верх производительности и элегантности. Тут смешано всё самое плохое: многословность визитёра и рефлексия. Кода много и он медленный.
В прошлой теме, я постарался обосновать, зачем нужно столько писанины (визитёр) - что бы избавиться от необходимости рыться в метаданных. Вся ваша писанина бесполезна, ведь в конце концов вы всё равно лезите в метаданные, да ещё и самым тяжёлым способом (рефлексия). Неужели вы вообще не думаете, что пишете? Если так, то пишите любой тяп-ляп, лишь бы он был короткий и ясный был, остальное для вас просто не важно. Ну уточнения по * визитёр - это роль класса, называть его так не нужно; * методы в визитёре, как правило, отражают имя класса, который они принимаю: VisitDog, VisitCat, VisitCow; * метод визитёра может принимать нужный тип объекта; * визитёра, как гостя, принимают (Accept), а не применяют как вещь (Apply); * методы визитёра принимают только ссылку на объект, никаких других параметров там не должно быть; * визитёр заключает в себе логику обработки, это - не тупо набор методов для кривого перевызова извне. Это - самостоятельная логическая единица. Если вариантов алгоритмов обработки одного и того же типа может быть несколько, то создавайте несколько же разных визитёров. Рекомендую пересмотреть прошлую тему с четырьмя примерам визитёра. Вы их, видимо, не заметили. Во всех примера всё было просто и понятно. Для меня остаётся загадкой, почему вам так сложно понять, что в визитёр нужно вынести не отдельные строчки кода из блока IF (anima is Dog) {}, в вообще всё, так, что бы из call site вам нужно было просто вызвать визитёра и всё. Максимум - при создании класса визитёра ему передать параметры какие-то, если нужно.Если честно, то в вашем случае я вижу самое элегантное решение: использовать то, что уже есть и плевать правильно или нет оно написано. Я уже просто устал одно и тоже раз за разом объяснять и смотреть, как эта информация от вас отлетает как горох от стены. Вас никто никуда не гонит (я так думаю). Сядьте спокойно и разберите примеры (в том числе и из википедии или гугла), строчка за строчкой, вдумчиво. Если что-то непонятно - погуглите и ещё раз подумайте. Потом спросите, но сначала подумав.
0
|
|
|
|
||||||
| 15.06.2017, 08:19 [ТС] | ||||||
ну да, тупанул))1) Я тоже устал объяснять вам аж в двух разных темах что мне нужно. И кодом показывал, и словами, и блин даже кусок своего кода выложил - вам всё ни по чём. Точнее, вы не понимая сути моего вопроса сыплете шаблоном визитёра из гугла. Сколько раз можно мне писать)) с помощью визитера: - мне НЕ надо устанавливать свойство во всех классах коллекции и НЕ надо что-то там вычислять в классах - мне НЕ надо обрабатывать никакую логику ни над конкретным классом который визится в данный момент при переборе, ни в каких либо других классах при переборе и Visit() на них - мне НЕ надо реализовывать в какую-то "самостоятельную логическую единицу" в визитере - "да смотреть не вернёт ли он true" Мне НЕ надо возвращать true из визитера. Исключение: break; показанный Storm23.Мне нужно всего лишь избавиться от каста для получения значения свойства, или установки оного, одного единственного уникального класса из коллекции с этими классами. Или вообще без всякого перебора просто получить значение свойства, или установить значение свойства, класса имея лишь его интерфейс. Всё. Это жуётся вот уже 2 темы. Именно жуётся вами. Форум то на то и существует, чтоб помогать или спрашивать. Пространные ответы посыла в гугл на конкретный вопрос или ответы в стиле "всё не то, переделывай" без объяснения как НАДО переделать - оно вам нравится что-ли? ![]() Psilon с ходу понял что нужно сделать с визитёром чтоб установить свойство, а вы всё пишете про шаблонный перебор коллекции. Знаете, я кажется понял. У вас ответы в стиле "увидел нужное слово в сообщении - ответил в нужном русле, но исходя из своих соображений" ![]() чуток сарказма)) Не по теме:
0
|
||||||
|
14314 / 9398 / 1355
Регистрация: 21.01.2016
Сообщений: 35,431
|
|||
| 15.06.2017, 08:30 | |||
|
skilllab, ну ок. Значит ваша задача существенно проще того, что вам даёт визитёр. Потому можете просто использовать IS или каст и не париться.
![]()
0
|
|||
|
|
||||
| 15.06.2017, 08:46 [ТС] | ||||
|
Ещё раз: вы не можете меня окончательно понять именно по этому вопросу (что эта тема, что та). Вы натолкнули меня на 2 важные правильные мысли, за что и "спасибкал". Остальное в стиле "погугли", "вот шаблонный способ из первых трёх страниц гугло-ссылок, подстраивай сам", "ну что тут непонятного", "я устал..." ![]() Не по теме: Я вспомнил откуда вообще начал с вами знакомство на этом форуме ))))
0
|
||||
|
14314 / 9398 / 1355
Регистрация: 21.01.2016
Сообщений: 35,431
|
|||||
| 15.06.2017, 08:54 | |||||
|
skilllab, было бы здорово посмотреть на программу (целиком), где такой подход понадобился. Есть подозрения (не сильно обоснованные), что можно было всё сделать настолько иначе, что две темы с визитёрами-рефлексиями могли оказаться лишними.
![]() Если не хотите показывать основной проект, можете сотворить кастрированный вариант, демонстрирующий идею и потребность в обсуждаемом. Добавлено через 4 минуты Добавлено через 1 минуту
0
|
|||||
|
|
|||||||||||||
| 15.06.2017, 09:44 [ТС] | |||||||||||||
Не будем об этом. Не тема этого топика.
0
|
|||||||||||||
| 15.06.2017, 09:44 | |
|
Помогаю со студенческими работами здесь
20
Свойство класса возвращает объект другого класса
Как получить ссылку на метод класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|