一般比较常规的方法写delegate的方式为:
delegate int AddHandler(int i, int j);
delegate void PrintHandler(string msg);
static void Main(string[] args)
{
AddHandler add = Add;
PrintHandler print = Print;
print(add(1, 2).ToString());
}
static int Add(int i, int j)
{
return i + j;
}
static void Print(string msg)
{
Console.WriteLine(msg);
}
在这个写法下,首先声明了delegate AddHandler的存在,然后指向叫Add的方法,这样的写法最终还是比较繁琐。
FCL里面提供了三类委托声明,分别为 Action,Func和Predicate
他们的差别在于
Action可以输入参数但没有返回值
Func可以输入参数但是有返回值
Predicate先判断参数是否符合条件
这样我们可以简化代码如下,不需要申明delegate的存在可以直接使用委托。
static void Main(string[] args)
{
Func<int, int,int> add = Add;
Action<string> print = Print;
//AddHandler add = Add;
//PrintHandler print = Print;
print(add(1, 2).ToString());
Console.ReadKey();
}