Сегодня 30 апреля, вторник ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7272
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
it works!
it works!
Голосов: 1
Адрес блога: http://itw66.ru
Добавлен: 2012-03-20 21:16:50
 

Преобразовать строку в делегат в C#

2012-10-08 09:37:30 (читать в оригинале)

Столкнулся с интересной задачей. У меня есть текст функции, записанный в строку. Я хочу получить из нее делегат и исполнять его, как обычную функцию. Раньше я к этой задаче относится как к чисто теоретической, однако недавно мне понадобилось исполнить строковое выражение и я вспомнил о компиляции кода в реальном времени.

Ну согласитесь, не парсить же текст, не разбивать его на токины и не исполнять же его в ручную? Именно так бы я и сделал когда-то в школе, но сейчас хочется чтобы всю работу делал C#. Зря что ли в него добавляли все эти возможности.

Я не буду рассказывать то как я думал, чтобы дойти до результата, а сразу его представлю. Итак, использование моего класса выглядит следующим образом:

// объявляем требуемый делегат. Он может иметь любые принимаемые параметры и возвращаемое значение
public delegate Single	TestDelegate( Single param1, Single param2 );

// строка, в которой записан текст функции. В примере это будет очень простой код. В реальности он может быть любым.
String funcText = "public static Single	FuncName( Single param1, Single param2 )"+
		"{"+
		"	return param1 + param2;"+
		"}";

// Создаем функцию, передавая имя создаваемой функции и строку ее содержащую.
// Кроме того, параметром шаблона передается тип делегата, объявленный ранее
TestDelegate func = DelegateGenerator.CreateDelegate< TestDelegate >( "FuncName", funcText );

// проверяем, получилось ли создать делегат
if( null == func )
	return;

// работаем как с обычной функцией
Single ss = func( 5, 10 ); // ss = 15


Если вам интересно, как же все это работает, то читайте дальше!

Читать дальше

Тэги: делегат, компиляция, программирование

 


Самый-самый блог
Блогер Рыбалка
Рыбалка
по среднему баллу (5.00) в категории «Спорт»
Изменения рейтинга
Категория «Политика»
Взлеты Топ 5
+256
270
CAPTAIN
+215
287
badvista.org
+189
218
www.blogpr.ru - Лента постов
+184
235
СМИ 2.5
+177
215
Ksanexx
Падения Топ 5


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.