招投标网站建设,网站cms大全,原画培训机构哪里好,静态网页软件一.委托的概念
C#中委托也叫代理#xff0c;委托提供了后期绑定机制(官方解释)#xff0c;功能类似于C中的函数指针#xff0c;它存储的就是一系列具有相同签名和返回类型的方法的地址#xff0c;调用委托的时候#xff0c;它所包含的所有方法都会被执行。
二.委托的用法…一.委托的概念
C#中委托也叫代理委托提供了后期绑定机制(官方解释)功能类似于C中的函数指针它存储的就是一系列具有相同签名和返回类型的方法的地址调用委托的时候它所包含的所有方法都会被执行。
二.委托的用法
1.声明委托
语法:修饰符 delegate 函数返回类型 委托名 (函数参数)
2.类似于创建对象委托实例化将实例化一样签名的函数名作为参数传进构造函数
3.调用委托
a.像调用函数一样调用委托
b.通过Invoke调用委托
namespace Console0719
{class Program{public class DelegateTest{public static int add10(int a){return 10 a;}public static int add5(int a){return 5 a;}}//step1:声明委托(类似函数签名无需实现)public delegate int Cal(int a);static void Main(string[] args){//step2.声明委托实例将实例化一样签名的函数名作为参数传进小括号Cal cal1 new Cal(DelegateTest.add10);//step3.像调用函数一样调用委托Console.WriteLine(cal1(3)); //输出13 cal1 new Cal(DelegateTest.add5);//step3.通过Invoke()调用委托Console.WriteLine(cal1.Invoke(3)); //输出8}}
}
三.委托的作用
1.回调函数
step1:函数中将委托的实例作为参数
step2:函数中调用委托
step3:将恰当的回调函数作为实参
namespace Console0719
{class Program{delegate void DelegateDone();static void Main(string[] args){Program test new Program();//step3:将恰当的回调函数作为实参test.Work(CallBack);}//step1:函数中将委托的实例作为参数void Work(DelegateDone callBack){Console.WriteLine(回调执行之前);//step2:函数中调用委托callBack();}static void CallBack(){Console.WriteLine(回调执行成功);}}
}
2.提高代码复用性
3.降低耦合度提升扩展性
四.委托的多播
委托可以调用多个方法这被称为多播。 若要向委托的方法列表调用列表添加其他方法只需使用加法运算符或加法赋值运算符“”或“”添加两个委托“-”撤销委托。 例如
namespace Console0719
{class Program{public delegate void DelTest();static void Main(string[] args){Program test new Program();DelTest del1 new DelTest(work1);DelTest del2 new DelTest(work2);DelTest del3 del1 del2;Console.WriteLine(结果:);del1 work3;del1();Console.WriteLine();//输出work1 work3Console.WriteLine(结果:);del3();Console.WriteLine();//输出work1 work2Console.WriteLine(-结果:);del3 - work1;del3();Console.WriteLine();//输出work2}//step1:函数中将委托的实例作为参数static void work1(){Console.WriteLine(work1);}static void work2(){Console.WriteLine(work2);}static void work3(){Console.WriteLine(work3);}}
}