![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 7 Всего: 93 |
tol05, насчёт твоего поста - сорри, заметил ток сейчас...
если честно, не очень понимаю о чём ты говоришь, а потому задам вполне конкретный вопрос и хочу получить вполне конкретный ответ(да/нет)... итак меня интересует, можно ли, используя только лишь рефлексию(без компилятора/транслятора), исполнять произвольный код(хранящийся в строке)? что я подразумеваю под компилятором, транслятором и т. п.? ну вот вполне конкретный пример... есть у меня строковая переменная src со следующим содержанием:
итак, что мы можем сделать с этим кодом? ну, обрамить его каким-то шаблоном аля
можем пойти по другому пути: написать свой, более или менее мудрый транслятор... что это значит? ну примитивную строку "myFunction()" мы исполнять уже умеем... добавить другие примитивы и работать рефлексией как виртуальной машиной... т.е. while перейдет в несколько маленьких шагов, внутри которых будут вообще примитивные шаги... т. е. нам придется сделать уже не конечное число операций(скомпилировать, запустить - 2 операции), а фиг знает сколько... т.е. мы превратимся в т.н. виртуальный процессор... заметьте, нам понадобился транслятор, т. е. штука которая не компилирует код, но не так глобально как компилятор, а только лишь в примитивы, которые умеет делать наш виртуальный процессор(что умеет делать рефлексия). итак, ещё раз, вопрос: можно ли обойтись без того или иного в том или ином виде, чтобы исполнять произвольный код? т.е. я с клавиатуры введу программу и она должна исполниться... AFAICS, ответ - нет. но я сравнительно давно забросил изучение .net и могу быть некомпетентен в этом вопросе... потому и спрашиваю. если ответ - да, то не нужно ни о чем спорить и что-либо комментировать: просто приведите маленький кусочек кода, который выполнит мою строку src. замечу, что я могу изменить строку src и поведение вашего примера должно изменится... -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
| KuZyagroup |
|
||||
![]() magento solution ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 16.4.2007 Где: Kiev Репутация: нет Всего: 4 |
msdn говорит
и оно работает. А как запустить Invoke из своего класа
|
||||
|
|||||
| tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
всем привет.
archimed7592, честно говоря, в такие дебри мы позалазили, что нужно эту тему сначала пол-часа читать, что б понять, кто о чем говорит
Смотря что понимать под произвольным кодом. Если шарповский код - то нет. Если строчки типа
Но если писать конструкции кода MSIL (как я показал) - то да, можно, без компилятора, транслятора. А ведь есть люди, которые пишут на MSIL, на ассемблере. Найдите где-нибудь книгу Алексея Дубовцева "Microsoft .Net в подлиннике" - он половину примеров на чистом IL пишет (в блокноте правда, но я показал, как можно динамически) и ничего, жив пока. Я не говорю, что это делать нужно... Я говорю, что возможности для этого .Net обеспечивает. P.S. KuZyagroup, что-то код твоего класса мало C# напоминает А запустить - просто. Загружаешь сборку, получаешь из нее нужный тип, у типа ишешь среди MethodInfo[] нужный тебе метод, формируешь для этого, конкретного MethodInfo нужные ParameterInfo и вызываешь MethodInfo.Invoke (если не ошибаюсь) Это сообщение отредактировал(а) tol05 - 30.5.2007, 10:06 -------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
| KuZyagroup |
|
|||
![]() magento solution ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 16.4.2007 Где: Kiev Репутация: нет Всего: 4 |
вопрос в том как передать первый параметр Invoke |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Это сообщение отредактировал(а) tol05 - 30.5.2007, 10:55 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 7 Всего: 93 |
tol05, ладно, думаю мы все избавились от иллюзии, что рефлексия может исполнять произвольный код на .net языке.
что-же касается MSIL - его тоже придётся парсить... ты не показал ф-ции, которая берёт на вход строку, представляющую из себя MSIL код, и исполняет её... спасибо за дискуссию. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| KuZyagroup |
|
|||
![]() magento solution ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 16.4.2007 Где: Kiev Репутация: нет Всего: 4 |
Слава богу, священной войны не будет
П.С. хотя прикольно звучало
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |