2

有一个方法定义如下:

public static void MyMethod(Delegate action, parames object[] parameters)
{
   action.DynamicInvoke(parameters);
   //Do something
}

到目前为止,这种方法可以很好地接收具有任意数量参数的各种方法和函数,但我想知道是否有一种方法可以将构造函数作为 Delegate 参数传递。

感谢您的帮助。

4

2 回答 2

8

您必须围绕构造函数构造一个匿名函数,因为构造函数不能直接转换为委托。(这是因为构造函数并不是真正创建对象的对象;newobj指令创建对象,然后调用构造函数来初始化分配的内存。直接为构造函数创建委托将等同于call指令,但这并不对构造函数有意义。)

例如,给定这种类型:

class Foo {
    public Foo(string str) { }
}

你可以这样做:

MyMethod(new Func<string, Foo>(str => new Foo(str)), "a string");
于 2013-04-04T14:42:17.010 回答
1

正如 cdhowie 向您展示的那样,您当前的方法是可能的,但如果需要,另一种选择是利用Activator.CreateInstance,所以它可能看起来像这样:

public static object CreateObject(Type t, params object[] parameters)
{
    return Activator.CreateInstance(t, parameters);
}
于 2013-04-04T14:43:34.393 回答