为了方便码农们,.Net基类库针对实际开发中最常用的情形提供了几个预定义好的委托,这些委托可以直接使用,无需再重头定义一个自己的委托类型。预定义委托在.Net基类库中使用的比较广泛,比如在Lambda表达式和并行计算中都大量地使用,需要我们予以关注起来!


public delegate void Action();                    //无参数,无返回值
public delegate void Action<T>(T obj);             //有指定类型参数,无返回值
public delegate void Action<T1,T2>(T1 obj1,T2 obj2);             //有指定类型参数,无返回值
public delegate void Action<T1,T2,T3>(T1 obj1,T2 obj2,T3 obj3);             //有指定类型参数,无返回值
public delegate void Action<T1,T2,T3,T4>(T1 obj1,T2 obj2,T3 obj3,T4 obj4);             //有指定类型参数,无返回值

public delegate bool Predicate<T>(T obj);            //指定类型参数,返回bool类型

C#:public delegate TResult Func<TResult>();    VB.Net:public delegate Func(Of TResult) as TResult        //无参数,指定类型返回值
对应的嵌套函数:  VB.net  Function() true

C#:public delegate TResult Func<T,TResult>();   VB.net:public delegate Func(Of T,TResult) as TResult          //有一个指定类型参数,指定类型返回值
对应的嵌套函数:  VB.net  Function(p) true

C#:public delegate TResult Func<T1,T2,TResult>();   VB.net:public delegate Func(Of T1,T2,TResult) as TResult          //有二个指定类型参数,指定类型返回值
C#:public delegate TResult Func<T1,T2,T3,TResult>();   VB.net:public delegate Func(Of T1,T2,T3,TResult) as TResult          //有三个指定类型参数,指定类型返回值
C#:public delegate TResult Func<T1,T2,T3,T4,TResult>();   VB.net:public delegate Func(Of T1,T2,T3,T4,TResult) as TResult          //有四个指定类型参数,指定类型返回值