委托的使用主要是为了解决不知道什么时候可能触发的这种事件而用的,比如你开了一家餐馆,要做饭,收钱等,还需要接听不定期打来前台的电话,这时候你就可以把这个工作交给会接电话的儿子来做这个事情 。这个过程就叫做委托。儿子接完电话可以告诉你也可以不告诉你,这就看这个委托的类型
一、普通委托(比如我们要执行一个两数的加法运算)
第1步:定义委托(接电话这个事)
public delegate int AddDel(int a,int b);
第2步:写真正的执行加法的方法(定义一个会接电话的儿子)
public int FuncAdd(int a,int b)
{
return a+b;
}
第3步:将方法绑定到委托,一个委托可以绑定多个方法,只要参数符合要求,这就是我们所说的多播委托(告诉儿子接电话这个事情)
AddDel myadddel = new AddDel(FancAdd);
第4步:开始(儿子开始等电话)
myadddel(3, 4);或者 myadddel.Invoke(3,4);
二、泛型委托
其实系统已经内置了两个定义好的委托,我们可以省略普通委托中的第1步
这两个系统委托就是Func<T> 和Action<T>区别是Func 参数列表T,最后一个是返回值,而 Active无任何返回值。(参数列表T,最多16个输入函数,可以是任何类型)
1.Func委托
比如 两数相加我们使用Func写如下:
#region 匿名委托Func 返回处理结果
Func<int, int, int> 我的匿名委托 =
delegate(int a, int b)
{
return a + b;
};
#endregion
2.Action委托
如果我们执行一个不需要返回结果的委托则使用Action 比如我们让说一句 hello world
#region 匿名委托Active 不返回处理结果
Action<string> 我的匿名委托2 =
delegate(string s)
{
Console.WriteLine(s);
};
我的匿名委托2.Invoke("hello world ");
#endregion
3.使用lambda表达式简化委托写法
Func<int, int, int> 我的lambda表达式委托 =
(int a, int b) => a + b;
Action<string > 我的lambda表达式委托2=
(s)=>console.writeline(s);