私の目標は、次のコードでdemostratedさ:ジェネリックメソッドは
void MyMethod<T>(T aMethod, params object[] aParams) where T: System.Delegate
{
aMethod.Invoke(aParams);
}
は、どのように私はこの種のものを行うことができますか?
私の目標は、次のコードでdemostratedさ:ジェネリックメソッドは
void MyMethod<T>(T aMethod, params object[] aParams) where T: System.Delegate
{
aMethod.Invoke(aParams);
}
は、どのように私はこの種のものを行うことができますか?
Unconstrained Melodyを使用するか、これを許可するビットを挟むことができます。
一方、実際にはInvoke
メソッドが公開されるわけではありません。あなたは何をしたいのですか?
void MyMethod(Delegate aMethod, params object[] aParams)
{
aMethod.DynamicInvoke(aParams);
}
?私は
T
がタイプである必要がありますが、あなたはどのジェネリック
void MyMethod(Action<object[]> aMethod, params object[] aParams)
{
aMethod(aParams);
}
void Print(params object[] output)
{
foreach (var o in output)
Console.WriteLine(o);
}
呼び出し、それを:
MyMethod(Print, 1, "Hello");
これはパラメータを持たないデリゲート(MethodInvoker)では機能しません。 – Max
は、私はあなたが実際に達成しようとしているかわからないんだけど:だけコンパイラやランタイムがSystem.Delegateから継承することができますので、どのようなポイントは、ジェネリックを持っています以上:
void MyMethod<T>(System.Delegate aMethod, params object[] aParams)
{
aMethod.DynamicInvoke(aParams);
}
デリゲート型の制約を使用すると面倒なことをしようとしている場合は、http://code.google.com/p/unconstrained-melody/を見ることができます。
それとも、ただAction<object[]>
使用 - などAction<T>
または過負荷の多くを、Action<T1,T2>
、
void MyMethod(Action<object[]> aMethod, params object[] aParams)
{
aMethod(aParams);
}
//or
void MyMethod<T>(Action<T> aMethod, T param)
{
aMethod(param);
}
void MyMethod<T1, T2>(Action<T1, T2> aMethod, T1 param1, T2 param2)
{
aMethod(param1, param2);
}
私が過負荷の巨大なリストを本当に好きではないが、いくつかのケースでは、彼らは最高のライブラリを提供使いやすさ。
私は何とかパラメータ型の安全性を得ることを望んでいました。 – Max
@ Max:なぜメソッドを直接呼び出してみませんか?これが本当にあなたを買っているのか分かりません。 –
一般的な例外処理コードを抽出したい。 – Max