委托的使用主要是为了解决不知道什么时候可能触发的这种事件而用的。
我们举个例子,假如你开了一家餐厅,除了日常的餐饮业务之外,还会有电话订餐等业务。电话订餐的业务就可以委托给儿子,这个过程就叫做委托。
儿子接完电话可以告诉你,也可以不告诉你,这就看这个委托的类型。
一、普通委托(比如我们要执行一两个数的加法运算)
//第一步,定义委托 (接电话这个事件)
public delegate int AddDel(int a , int b);
//第二步,写真正的执行加法的方法 (定义一个会接电话的儿子)
public int FuncAdd(int a ,int b){
return a + b;
}
//第三步,将方法绑定到委托,通常一个委托可以绑定多个方法,这就是我们所说的多播委托 (告诉儿子接电话这个事情)
AddDel myadddel = new AddDel(FancAdd);
//第四步,开始 (儿子开始等电话)
myadddel(3,4);
//或者myadddel.Invoke(3,4);
二、泛型委托
系统中其实已经内置了两个定义好的委托,我们可以省略掉普通委托中的第一步
这两个系统委托的就是Func和Action ,二者区别是Func参数列表T,最后一个是返回值,而Action是没有任何返回值的(参数列表T,最多16个输入函数,可以是任何类型)
1.Func委托
#region
Func<int,int,int> 我的匿名委托 =
delegate(int a , int b){
return a + b;
};
#endregion
2.Action委托
如果我们执行一个不需要返回结果的委托,则使用Action ,比如我们让说一句Hello World
#region
Action<string> 我的匿名委托2 =
delegate(string s){
Console>WriteLine("Hello World");
};
我的匿名委托2. Invoke("Hello World");
#endregion
3.使用Lambda表达式简化委托写法
Func<int, int , int> 我的Lambda表达式委托=
(int a, int b) => a+b;
Action<string> 我的Lambda表达式委托2 =
(s) =>Consloe.WriteLine(s);