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

发布于 2024-10-30 14:20:19 字数 283 浏览 0 评论 0原文

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

爱情眠于流年 2024-11-06 14:20:19

查找方法信息

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;
    } 
}

Find the method info

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

Convert it to a delegate

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

Edit - Here is a small Linqpad snippet where I've setup an extension method off String to create delegates. There is no error checking!

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;
    } 
}
思慕 2024-11-06 14:20:19

使用反射来获取方法:

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

Use reflection to get a method:

GetType().GetMethod(str).Invoke(this, new object[0])
疧_╮線 2024-11-06 14:20:19

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

This walks you through exactly how to do it: http://www.codeproject.com/KB/cs/C__Reflection_Tutorial.aspx

方圜几里 2024-11-06 14:20:19

您可以使用 Reflection.Emit 创建代码,但这不需要字符串。另一种选择是 CodeDOM ,它可以接受字符串。

Soultion

您可以使用编译器来构建程序集并加载。请查看此处

You can use Reflection.Emit to create code but this would not take a string. Another alternative is CodeDOM which can take string.

Soultion

You can use Compiler to build an assembly and load. Look here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文