| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Инормация о переменных, объявленных в методе. |
| Автор: desevg 26.7.2009, 15:54 | ||
к примеру есть код сбоки:
допустим, я подгружаю эту сборку динамически. потом я могу получить какие в этой сборке есть классы. допустим узнаю, что в этой сборке есть класс Code. получаю информацию, что в нем есть метод doUserCode.. а я могу как-нибудь узнать, какие есть локальные переменные в этом методе? |
| Автор: kobra 26.7.2009, 17:54 |
| если сделать их публичними, да |
| Автор: desevg 26.7.2009, 18:08 |
| публичными? оО это же не свойства класса, а просто локальные переменные метода. вопрос открыт! если что я не понимаю, приведите пример, пожалуйста |
| Автор: Экскалупатор 26.7.2009, 19:15 |
| desevg, программно я думаю не сможете(имхо, я не волшебник я только учусь) т.е. во время выполнения вашего кода, а вот чем_нибудь сторонним дизасемблировать я думаю можно. ILDasm вроде умеет, если конечно переменные не были переименованы во время компиляции. |
| Автор: mihryak 26.7.2009, 19:44 |
| http://msdn.microsoft.com/en-us/library/system.reflection.localvariableinfo.aspx |
| Автор: desevg 26.7.2009, 20:52 | ||
| Экскалупатор, нет. нужно программно. mihryak, неплохой класс. но как я понял, он даст только представление о типах переменных и их количестве. я попробую еще порыть там, но мне нужно вытащить имена переменных, которые там содержатся. если кто знает, помогите Да, как я и предположил на скидку, он выдает тип и индекс переменной в стеке, а мне по зарез нужны имена. определю задачу. мне нужно сделать следующее. есть тестовое поле, туда какой-нить человек вводит код на шарпе, я этот код подставляю в заготовленный метод заготовленного класса. потом в конец метода дописываю свой кусок кода, который должен узнать имена переменных, которые определил человек, написавший кусок кода для того, что бы вернуть значения всех этих переменных и компилирую динамически. потом вызываю через рефлексию этот метод и получаю статистику по все переменным. вот, такая штука как вариант, можно, конечно, распарсить код набранный пользователем, но хочется изящного решения;) нашел класс FieldInfo, но он для класса. Там можно для класса получить поля:
не уж то нет для локальных такого?:( |
| Автор: mihryak 26.7.2009, 22:49 |
| хотя при вызове TypeBuilder.DefineField и требуется указать имя переменной, интернет-сообщество сходится во мнении, что получить их обратно через рефлексию уже не удастся судя по всему, придётся разбирать IL, искомое будет находиться в директиве .locals пс. тебе не поможет, но всё равно занятная статейка нагуглилась - http://abdullin.com/journal/2008/12/13/how-to-find-out-variable-or-parameter-name-in-c.html |
| Автор: desevg 27.7.2009, 15:19 |
| интересная статья, правда немного сложно для меня. я в шарпе без году неделя... что-то ничего так и несмог пока найти, как получить. ты говоришь, что нужно разбирать IL, а можешь по подробней написать? в какую сторону рыть? |
| Автор: mihryak 27.7.2009, 18:22 |
| не, не могу, увы, сам "не в теме" никогда этим не занимался, а разбираться долго и сложно посмотри на http://sourceforge.net/projects/reflexil/ |
| Автор: Экскалупатор 27.7.2009, 22:32 |
| desevg, сдается мне, что проще будет распарсить то что введет пользователь, чем разбирать IL |
| Автор: desevg 28.7.2009, 13:09 | ||||
настолько код не будет усложнятся. программа предназначенна, для обучения школьников программированию. т.е. там будут задачи из школьго курса. алгоритмы в один метод, как правило. Ученик будет рисовать блок схему и по ней будет собираться код. потом подставляться в код подготовленного метода и если выбран режим компиляции, то создается ехе файл, а если отладки, для этого и нужен вышеописанный гем**ой. нужно проанализировать переменные, которые есть и подставить свой код, который после исполнения метода вернет данные по переменным для анализа. Добавлено @ 13:14 т.е.
соответственно, вызывать это чудо можно рефлексией |