![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| desevg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 22.1.2009 Репутация: нет Всего: нет |
к примеру есть код сбоки:
допустим, я подгружаю эту сборку динамически. потом я могу получить какие в этой сборке есть классы. допустим узнаю, что в этой сборке есть класс Code. получаю информацию, что в нем есть метод doUserCode.. а я могу как-нибудь узнать, какие есть локальные переменные в этом методе? Это сообщение отредактировал(а) desevg - 26.7.2009, 16:00 |
|||
|
||||
| kobra |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: 1 Всего: 9 |
если сделать их публичними, да
|
|||
|
||||
| desevg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 22.1.2009 Репутация: нет Всего: нет |
публичными? оО это же не свойства класса, а просто локальные переменные метода. вопрос открыт! если что я не понимаю, приведите пример, пожалуйста
Это сообщение отредактировал(а) desevg - 26.7.2009, 18:09 |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
desevg, программно я думаю не сможете(имхо, я не волшебник я только учусь) т.е. во время выполнения вашего кода, а вот чем_нибудь сторонним дизасемблировать я думаю можно. ILDasm вроде умеет, если конечно переменные не были переименованы во время компиляции.
|
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
||||
|
||||
| desevg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 22.1.2009 Репутация: нет Всего: нет |
Экскалупатор, нет. нужно программно.
mihryak, неплохой класс. но как я понял, он даст только представление о типах переменных и их количестве. я попробую еще порыть там, но мне нужно вытащить имена переменных, которые там содержатся. если кто знает, помогите Да, как я и предположил на скидку, он выдает тип и индекс переменной в стеке, а мне по зарез нужны имена. определю задачу. мне нужно сделать следующее. есть тестовое поле, туда какой-нить человек вводит код на шарпе, я этот код подставляю в заготовленный метод заготовленного класса. потом в конец метода дописываю свой кусок кода, который должен узнать имена переменных, которые определил человек, написавший кусок кода для того, что бы вернуть значения всех этих переменных и компилирую динамически. потом вызываю через рефлексию этот метод и получаю статистику по все переменным. вот, такая штука как вариант, можно, конечно, распарсить код набранный пользователем, но хочется изящного решения;) нашел класс FieldInfo, но он для класса. Там можно для класса получить поля:
не уж то нет для локальных такого?:( Это сообщение отредактировал(а) desevg - 26.7.2009, 21:34 |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
хотя при вызове TypeBuilder.DefineField и требуется указать имя переменной, интернет-сообщество сходится во мнении, что получить их обратно через рефлексию уже не удастся
судя по всему, придётся разбирать IL, искомое будет находиться в директиве .locals пс. тебе не поможет, но всё равно занятная статейка нагуглилась - http://abdullin.com/journal/2008/12/13/how...-name-in-c.html |
|||
|
||||
| desevg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 22.1.2009 Репутация: нет Всего: нет |
интересная статья, правда немного сложно для меня. я в шарпе без году неделя... что-то ничего так и несмог пока найти, как получить. ты говоришь, что нужно разбирать IL, а можешь по подробней написать? в какую сторону рыть?
|
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
не, не могу, увы, сам "не в теме"
никогда этим не занимался, а разбираться долго и сложно посмотри на http://sourceforge.net/projects/reflexil/ |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
desevg, сдается мне, что проще будет распарсить то что введет пользователь, чем разбирать IL
|
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
синтаксический разбор языка - тоже не задачка на 5 минут к тому же, в скомпилированном коде могут отсутсвовать некоторые из распарсенных переменных а вообще - имеет ли вообще задача решение? например, локальные переменные объявлены в цикле, из значение в конце цикла неопределено, да и вообще не несёт никакого цикла а при использовании анонимных делегатов-лямбд вообще будут сгенерированы дополнительные классы. что делать с ними? |
|||
|
||||
| desevg |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 22.1.2009 Репутация: нет Всего: нет |
настолько код не будет усложнятся. программа предназначенна, для обучения школьников программированию. т.е. там будут задачи из школьго курса. алгоритмы в один метод, как правило. Ученик будет рисовать блок схему и по ней будет собираться код. потом подставляться в код подготовленного метода и если выбран режим компиляции, то создается ехе файл, а если отладки, для этого и нужен вышеописанный гем**ой. нужно проанализировать переменные, которые есть и подставить свой код, который после исполнения метода вернет данные по переменным для анализа. Добавлено @ 13:14 т.е.
соответственно, вызывать это чудо можно рефлексией Это сообщение отредактировал(а) desevg - 28.7.2009, 13:15 |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |