是否可以使用反射将字符串转换为c#中的函数?

时间:2011-04-06 16:08:01

标签: c# reflection delegates

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() { } 

4 个答案:

答案 0 :(得分:3)

找到方法信息

http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.aspx

将其转换为委托

http://msdn.microsoft.com/en-us/library/53cz7sc6.aspx

编辑 - 这是一个小的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;
    } 
}

答案 1 :(得分:3)

使用反射来获取方法:

GetType().GetMethod(str).Invoke(this, new object[0])

答案 2 :(得分:1)

这将引导您完全了解如何操作:http://www.codeproject.com/KB/cs/C__Reflection_Tutorial.aspx

答案 3 :(得分:0)

您可以使用Reflection.Emit创建代码,但这不会占用字符串。另一种选择是CodeDOM,可以采用字符串。

Soultion

您可以使用Compiler来构建程序集并加载。看here