如何在.NET中动态调用类的方法?

如何将类和方法名称作为字符串传递并调用该类的方法?

喜欢

void caller(string myclass, string mymethod){ // call myclass.mymethod(); } 

谢谢

你会想要使用reflection 。

这是一个简单的例子:

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

现在这是一个非常简单的例子,没有错误检查,也忽略了更大的问题,比如如果类型存在于另一个程序集中该怎么做,但我认为这应该让你走上正确的轨道。

像这样的东西:

 public object InvokeByName(string typeName, string methodName) { Type callType = Type.GetType(typeName); return callType.InvokeMember(methodName, BindingFlags.InvokeMethod | BindingFlags.Public, null, null, null); } 

您应该根据要调用的方法修改绑定标志,并检查msdn中的Type.InvokeMember方法以确定您真正需要的内容。

你这样做的原因是什么? 您很可能无需反思即可完成此操作,包括动态assembly加载。