C#中的委托机制(二)
上篇blog中我们介绍了一下delegate的相关内容C#中的委托机制(一)
那么其实在C#中还有三个不同的委托类,分别是:Action和Func以及predicate。
Action
Action 是一种无返回值的泛型委托。它可以是无参数的,也可以是含参的,最高支持16个参数,基本的格式为:
访问权限控制符 (static) void 函数名<T>(Action<T> action, T p)
{
action(p);
}
例子:
public static void Test<T>(Action<T> action, T p)
{
action(p);
}
public static void Action(int x) //构造几个同名的函数
{
WriteLine(x * x);
}
public static void Action(double x)
{
WriteLine(x * x);
}
private static void Action(string s)
{
Console.WriteLine(s);
}
static void Main(string[] args)
{
Test<int>(Action, 100);
Test<double>(Action, 10.2);
Test<string>(p => { Console.WriteLine("{0}", p); }, "HelloWorld"); //使用Lambda表达式进行的委托
ReadKey();
Func
Func与Action的不同之处在于Func为有返回值的委托函数,因此必须进行return操作,Func与Action一样最多支持16个参数。
其中,Func为无参形式,返回值为int。
Func<T1,T2,T3,t4>为传入T1,T2,T3类型的变量,返回泛型类型为t4的返回值。
访问权限控制符 (static) T 函数名<T>(Func<T1,T2,T> func, T1 p,T2 q)
{
return func(p,q);
}
static void Main(string[] args)
{
Console.WriteLine(Test<int,int>(Fun,100,200));
Console.ReadKey();
}
public static int Test<T1, T2>(Func<T1, T2, int> func, T1 a, T2 b)
{
return func(a, b);
}
private static int Fun(int a, int b)
{
return a + b;
}
predicate
predicate 是返回 bool 型的泛型委托,predicate 表示传入参数为 int 返回 bool 的委托,Predicate 有且只有一个参数,返回值固定为 。具体代码可以参考官方文档。