public delegate void SimpleDelegate(); public void mycode() { string str = "myfunction"; /*somehow use reflection to turn str into myfunction so this will compile*/ SimpleDelegate simpleDelegate = new SimpleDelegate(str); } public void myfunction() { }
Используйте отражение, чтобы получить метод:
GetType().GetMethod(str).Invoke(this, new object[0])
Найти информацию о методе
http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.aspx
Преобразовать его в делегат
http://msdn.microsoft.com/en-us/library/53cz7sc6.aspx
Edit - Вот небольшой фрагмент Linqpad, где я создал метод расширения для String для создания делегатов. Нет проверки ошибок!
void Main() { var simpleDelegate = "test".CreateDelegate<Func<string>>(new Test()); simpleDelegate().Dump(); } class Test { public string test() { return "hi"; } } public static class ExtensionMethods { public static T CreateDelegate<T>(this string methodName,object instance) where T : class { return Delegate.CreateDelegate(typeof(T), instance, methodName) as T; } }
Здесь вы узнаете, как это сделать: http://www.codeproject.com/KB/cs/C__Reflection_Tutorial.aspx
Вы можете использовать Reflection.Emit для создания кода, но это не займет строку.Другой альтернативой является CodeDOM , который может принимать строку.
Reflection.Emit
Вы можете использовать компилятор для сборки сборки и загрузки.Смотрите здесь .