如何将类和方法名称作为字符串传递并调用该类的方法?
喜欢
void caller(string myclass, string mymethod){
// call myclass.mymethod();
}
Run Code Online (Sandbox Code Playgroud)
谢谢
And*_*are 32
你会想要使用反射.
这是一个简单的例子:
using System;
using System.Reflection;
class Program
{
static void Main()
{
caller("Foo", "Bar");
}
static void caller(String myclass, String mymethod)
{
// Get a type from the string
Type type = Type.GetType(myclass);
// Create an instance of that type
Object obj = Activator.CreateInstance(type);
// Retrieve the method you are looking for
MethodInfo methodInfo = type.GetMethod(mymethod);
// Invoke the method on the instance we created above
methodInfo.Invoke(obj, null);
}
}
class Foo
{
public void Bar()
{
Console.WriteLine("Bar");
}
}
Run Code Online (Sandbox Code Playgroud)
现在这是一个非常简单的例子,没有错误检查,也忽略了更大的问题,比如如果类型存在于另一个程序集中该怎么办,但我认为这应该让你走上正确的轨道.
像这样的东西:
public object InvokeByName(string typeName, string methodName)
{
Type callType = Type.GetType(typeName);
return callType.InvokeMember(methodName,
BindingFlags.InvokeMethod | BindingFlags.Public,
null, null, null);
}
Run Code Online (Sandbox Code Playgroud)
您应该根据要调用的方法修改绑定标志,并检查msdn中的Type.InvokeMember方法以确定您真正需要的内容.