1

今天在一次采访(初级网络开发人员)中,面试官问了我这个问题:

当您将其名称作为字符串时如何执行方法(在 javascript 和 C# 中)

我无法回答:(

现在,当我搜索时,我发现了这个问题How to execute a JavaScript function when I have its name as a string

但是如何在 c# 中做到这一点?

4

3 回答 3

6

如果您只有方法的名称,那么您只能使用.net Relfection该方法来运行该方法..

检查:MethodBase.Invoke 方法(对象,对象 [])

或者

例子 :

class Class1
   {
    public int AddNumb(int numb1, int numb2)
    {
      int ans = numb1 + numb2;
      return ans;
    }

  [STAThread]
  static void Main(string[] args)
  {
     Type type1 = typeof(Class1); 
     //Create an instance of the type
     object obj = Activator.CreateInstance(type1);
     object[] mParam = new object[] {5, 10};
     //invoke AddMethod, passing in two parameters
     int res = (int)type1.InvokeMember("AddNumb", BindingFlags.InvokeMethod,
                                        null, obj, mParam);
     Console.Write("Result: {0} \n", res);
   }
  }
于 2012-05-14T06:01:36.087 回答
2

假设您有该类型,您可以使用反射通过其名称调用方法。

class Program
{
    static void Main()
    {
        var car = new Car();
        typeof (Car).GetMethod("Drive").Invoke(car, null);
    }
}

public class Car
{
    public void Drive()
    {
        Console.WriteLine("Got here. Drive");
    }
}

如果您正在调用的方法包含参数,您可以将参数作为对象数组传递给与Invoke方法签名相同的顺序:

var car = new Car();
typeof (Car).GetMethod("Drive").Invoke(car, new object[] { "hello", "world "});
于 2012-05-14T06:04:40.830 回答
2

好文章。完整阅读。您不仅可以从字符串中调用方法,还可以从很多场景中调用方法。

http://www.codeproject.com/Articles/19911/Dynamically-Invoke-A-Method-Given-Strings-with-Met

如何调用名称作为参数的共享函数

于 2012-05-14T06:06:05.773 回答