所以说我有一个叫做 fun 的字符串。它的文本是“myFun”。我想运行一个名为 myFun 的函数:
private void myFun()
{
//stuff
}
有没有办法做到这一点,以便我可以根据字符串的文本运行它?也许是这样的:
myFun + ();
显然这行不通,但是有什么可以吗?
鉴于我有这堂课:
public class Foo
{
private void myFun()
{
Console.WriteLine("Hello, World!");
}
}
我可以调用这段代码:
var fun = "myFun";
var foo = new Foo();
foo
.GetType()
.GetMethod(
fun,
BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.InvokeMethod)
.Invoke(foo, new object[] { });
我想,这就是你想要的。
全球成员
delegate void aFunction();
构造函数或初始化函数
Dictionary<string, aFunction> myfunctions = new Dictionary<string, aFunction>();
myfunctions.Add("myFun", myFun);
从字符串调用你的函数
myfunctions["myFun"].Invoke();
你可以通过反射来做到这一点。假设myFun
是您调用它的同一类的成员:
var t = typeof( this );
t.InvokeMember(myFun,
BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic,
null, this, null);
正如亚历克斯建议的那样,您可以使用反射;或者如果你不需要能够运行任何给定的函数,你可以定义一个Dictionary
在名称和函数之间映射的。
这可能不是您正在寻找的,但您可以使用扩展方法完成几乎您想要的。
定义一个公共静态类并添加方法如下...
public static string ny(this string str)
{
//.. do something
}
然后导入您的扩展类,您可以直接在您的字符串对象上调用该函数。
myFun.ny();
扩展方法的关键是添加到参数的this关键字。同样,可能不完全是您正在寻找的东西,但它应该可以工作。