あなたは常にジェネリックデリゲートを受け入れることができます。代表団はすべて、あなたは少しタイプの消去を気にしない場合、あなたは
public delegate R DelegParams<R>(params object[] @params);
public static void AcceptAny<R>(DelegParams<R> paramsFunc) { /**/ }
あなたは間接的割り当てるには、ラムダ式を使用してこの署名にほとんどすべてのデリゲートことができSystem.Delegate
using System;
public class Program
{
public delegate R Deleg1<R,T1>(T1 arg);
public delegate R Deleg2<R,T1,T2>(T1 arg1, T2 arg2);
public delegate R Deleg3<R,T1,T2,T3>(T1 arg1, T2 arg2, T3 arg3);
public static void AcceptAny<R,T1>(Deleg1<R,T1> del) { /**/ }
public static void AcceptAny<R,T1,T2>(Deleg2<R,T1,T2> del) { /**/ }
public static void AcceptAny<R,T1,T2,T3>(Deleg3<R,T1,T2,T3> del) { /**/ }
public static void Main(string[] args)
{
}
}
から派生しますそれを包みます(Jon Skeetが示すAction
のようなアプローチ)。デリゲートは、共通の基本クラスを共有し、あなたは「反射様」のインタフェース(パラメータ、例えばとして一般的なobject[]
を取る)を使用して、それらを呼び出すことができるようにすることを
注:Delegate.DynamicInvoke Method
代わりにブール値を、リターンExceptionオブジェクトが優れていますアイデア –