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 に答える