delegate 是关键字, 用于声明一个代理类型。
Action,Func,Predicate 由delegate关键字声明的代理类型。
Example:
delegate void Action();
delegate void Action<T1,..Tn>(T1 arg1,...Tn argn);
delegate TResult Func<TResult> (TResult result);
delegate TResult Func<T1,..Tn,TResult>(T1 arg1, ...,Tn argn,TResult result);
delegate bool Predicate<T>(T arg);
Action: 可以接受0个或多个参数,(最多16个),无返回值
Func 可接受1个或多个参数(最多17个),最后一个参数为返回值。
Predicate 可接受1个参数,返回值为bool.