欢迎来到天天文库
浏览记录
ID:57698158
大小:17.16 KB
页数:7页
时间:2020-09-01
《使用C#中的委托类型实现代理设计模式.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、使用C#中的委托类型实现代理设计模式什么是代理设计模式指定一个对象做为另外一个对象的代理举例如下:·A对象具有实现比较两个整型数字大小功能··B对象的功能是要对一个整型数组进行排序·那么在B对象完成排序功能的代码中,就可以通过指定代理对象A来进行数字的比较来进行判断,是否需要交换代理设计模式需要用到的语法委托类型变量的声明·使用delegate关键字·//其中SortDelegate就是我们自定义的委托类型publicdelegateintCompareDelegate(intv1,intv2);//使用自定义的CompareDelegate
2、定义变量CompareDelegatecmp_delegate=null;··使用Action和Func泛型委托类型·//使用Action泛型委托定义委托变量时,没有返回值Actionaction=null;//使用Func泛型委托定义委托变量时,第一个类型为返回值类型Funcfunc=null;··使用Lambda表达式对上述三个变量进行赋值(第一种赋值方式)·//对自定义的委托类型变量进行赋值cmp_delegate=(intv1,intv2)=>{returnv1-v2;};//对Action泛型委托
3、定义的委托变量进行赋值action=(inta1)=>{//没有返回值的,只能执行逻辑动作Console.WriteLine(v3);}//对Func泛型委托定义的委托变量进行赋值func=(intf1,intf2)=>{returnf2-f1;}··使用函数分别对上述三个变量进行赋值(第二种赋值方式)·//定义一个比较函数,其中返回值是整型类型,参数是两个整型值inttest_method(intv1,intv2){returnv1-v2;}//那么该函数指针可以赋值cmp_delegate=test_method;//同样也可以赋值给fu
4、nc=test_method;//定义另外一个过程函数(即没有返回值的函数)voidtest_action(inta1){Console.WriteLine(a1);}//因为test_action函数的参数列表与action委托变量的参数列表相同,所以该函数指针可以赋值给action=test_action;·接口类型的声明·使用interface关键字·publicinterfaceCompareInterface{//接口类型中只能定义函数,不能实现函数,例如/**是错误的voidSayHello(){}*/voidSayHello()
5、;//是正确的}··使用自定义接口CompareInterface定义变量·//使用接口来定义的变量,可以接受的值一定是继承于该接口的CompareInterfacedelegate_object=null;·使用代理模式完成上述排序的DEMOAObject.cs完成比较的功能//定义一个可以进行比较的委托类型publicdelegateintCompareDelegate(ints1,ints2);//定义接口类型publicinterfaceCompareInterface{//只定义属性的GET方法CompareDelegateComp
6、are{get;}}//定义AObject类publicclassAObject:SortInterface{publicCompareDelegateCompare{get{//返回下边定义的私有函数returnp_cmp;}}//定义私有函数,用来保护程序逻辑代码封闭性privateintp_cmp(intp1,intp2){returnp1-p2;}}BObject.cspublicclassBObject{//指定代理对象publicSortInterfaceDelegate{set;get;}//BObject函数内的排序函数pub
7、licvoidSort(){int[]list=newList[]{3,1,5,6,9};for(inti=0;i0){inttemp=list[i];list[i]=list[j];list[j]=temp;}}}}}最终实现代理设计模式思想哪些情况下会使用到代理设计模式呢·[网络]下载文件完成后,需要代理对象处理下载的文件数据·o如果下载的是音乐,处理方式可以是
8、播放音乐oo如果下载的是文本,处理方式可以是存储到硬盘o·[逻辑]处理数据量比较大的数据完成后,需要代理对象执行处理结果·o数据库迁移后,要对数据进行读取oo图片滤
此文档下载收益归作者所有