271 / 238 / 102
Регистрация: 26.10.2012
Сообщений: 727
|
|||||||||||
1 | |||||||||||
Как пробиться через рефлексию к закрытым методам get, set для авто-свойства?18.05.2016, 16:14. Показов 1554. Ответов 9
Метки нет (Все метки)
Добрый день.
Как пробиться через рефлексию к закрытым методам get, set для авто-свойства? Если стучусь к такому свойству
Для такого свойства
Может есть какой-то хук не через рефлексию, или через рефлексию левых автосгенерированных полей?
0
|
18.05.2016, 16:14 | |
Ответы с готовыми решениями:
9
Выполнить команду в set свойства для свойства SelectedItem (ComboBox ) MVVM Вывод через свойства get; set; из бд Как получить тело метода через рефлексию? Как получить элемент списка через рефлексию? |
Администратор
|
||||||
18.05.2016, 16:38 | 2 | |||||
jetyb, ты уверен что set точно есть? Потому что GetSetMethod(true) работает без проблем
0
|
271 / 238 / 102
Регистрация: 26.10.2012
Сообщений: 727
|
|||||||||||
19.05.2016, 09:59 [ТС] | 3 | ||||||||||
OwenGlendower, уверен, несколько раз проверил и охреневаю
Пример вашего типа у меня также обнаруживает set method. У меня несколько другая (вроде только по виду, а не по сути) ситуация. Есть базовая библиотека A с абстракным классом BrakeSystem. Есть другая отдельная библиотека B, со ссылкой на базовую и классом BrakeSystem2ES10 - наследником класса базовой. Та библиотека скомпилирована в dll-ку. В базовой библиотеке через Assembly.Load (библиотека B не подключена) загружается эта библиотека B и создается рефлекшном объект типа BrakeSystem2ES10. Что у меня наблюдается: у типа BrakeSystem2ES10 свойство базового класса BrakeValve395 не имеет в рефлекшне метода Set. Проверил несколько раз. Что любопытно: собственное свойство SomeProperty класса BrakeSystem2ES10 через рефлекшн имеет set метод. У класса BrakeSystem свойство BrakeSystem2ES10 также имеет set метод. Какие-то взглюки из-за наследования?
Добавлено через 24 минуты хм то есть brakeSystemES10Type.GetProperty("BrakeValve395")!=brakeSystemES10Type.BaseType.G etProperty("BrakeValve395") Добавлено через 22 минуты Итак, проблема не в загружаемых сборках. Проблема в том, что PropertyInfo базового и наследуемого классов разные по инстансу и содержанию. Решил таким костылем: использую вместо type.GetProperties
0
|
271 / 238 / 102
Регистрация: 26.10.2012
Сообщений: 727
|
||||||
19.05.2016, 14:02 [ТС] | 5 | |||||
Зачем? проблема в этом
0
|
Master of Orion
|
|
19.05.2016, 15:20 | 6 |
0
|
271 / 238 / 102
Регистрация: 26.10.2012
Сообщений: 727
|
|
19.05.2016, 15:52 [ТС] | 7 |
Psilon, у меня пустой проект и опять же обратный результат
0
|
Master of Orion
|
|
19.05.2016, 16:10 | 8 |
jetyb, ну так CanWrite показывает, что объект этого типа может писать Меняем private на protected, и получаем true, потому что наследник имеет доступ к protected-переменным
То есть CanWrite говорит, может ли переменная типа Т записать в переменную Х. В данном случае А может записать, а B уже не может. Такой результат свойство и возвращает.
0
|
271 / 238 / 102
Регистрация: 26.10.2012
Сообщений: 727
|
|
19.05.2016, 16:20 [ТС] | 9 |
Psilon, я о таком обходе догадался
правда есть у него и недостатки: -ради собственного хука с рефлексией мне приходится менять архитектуру класса, который и писал-то не я (private set там может вполне подходить) -проект большой, таких вот автосвойств в коде очень много и еще много может появиться. Как мне менять их все? возможно разная работа кода на разных машинах проявляется из-за разных версий языка или фреймворка, но поменять фрейворк проекта существующего на куче машин не так то просто
0
|
Master of Orion
|
|
19.05.2016, 17:16 | 10 |
jetyb, CanWrite не имеет ничего общего с возможностью записывать в переменную. CanWrite может быть false, но через рефлексию значение засунуть все равно можно же.
0
|
19.05.2016, 17:16 | |
19.05.2016, 17:16 | |
Помогаю со студенческими работами здесь
10
Как работают свойства get set? F5 и F11 - один код, разные результаты! Как использовать рефлексию для уточнения значения параметра метода? Запретить доступ к методам свойства Как через цикл foreach перебрать все свойства LineCap для пера? Создание объектов через рефлексию Получить список инстансов через рефлексию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |