博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十四回 基础才是重中之重~委托实例的几种定义方式(规规矩矩method,逻辑简单delegate,层次清晰lambda)...
阅读量:6692 次
发布时间:2019-06-25

本文共 2291 字,大约阅读时间需要 7 分钟。

委托,一个不错的东西,.net中的委托用着挺爽,它的重要性以至于微软把它单拿出来,定义了几个现成的委托,如,Func和Action,既然人家把最特殊的委托签名拿 出来了,所以咱们就不

自己去定义了,就用Func和Action委托去讲一个如何定义他们的实例吧,呵呵。

第一 规规矩矩定义方法method

1        /// 2         /// 与Func
相同的方法签名3 ///
4 ///
5 static string StandardFunc() { return "标准点好"; }6 Func
Standard = new Func
(StandardFunc);//标准的委托实例

第二 逻辑简单匿名方法delegate

在对于方法逻辑简单的时候,我们没有必须再去定义一个额外的方法,而直接使用匿名方法即可

1   Func
FuncWhat2 = delegate(string s) { return s == "hello"; };//delegate定义一个匿名方法,不用重新再定义一个方法了
1  Func
FuncWhat3 = delegate() { return true; };

第三 层次清晰lambda

同样的逻辑简单,使用lambda表达式则会使代码层次感更清晰,本人超级推荐,呵呵

1 Func
FuncWhat4 = (string msg) => hello(msg);

事实上,微软自己的类库,也经常使用这种lambda方式,在每个新的技术出现时,小微自己都先去尝试,呵呵。

1         // 2         // 摘要: 3         //     通过使用实现验证资源访问功能的函数,初始化 System.ComponentModel.DataAnnotations.ValidationAttribute 4         //     类的新实例。 5         // 6         // 参数: 7         //   errorMessageAccessor: 8         //     实现验证资源访问的函数。 9         //10         // 异常:11         //   System:ArgumentNullException:12         //     errorMessageAccessor 为 null。13         protected ValidationAttribute(Func
errorMessageAccessor);

上面我只是一个简单的举例,在实际开发时,还要因情况而定,下面是在实现项目中的一个应用,当用户登陆时,去触发一个LogOn事件,然后,所以订阅了它的方法都自动去处理自己的

逻辑,看代码:

1     ///  2     /// 登陆事件 3     ///  4     public class LogOnEvent 5     { 6  7         ///  8         /// 登陆后的事件 9         /// 10         public static event Action LogOnAfter;11 12         /// 13         /// 触发RegisterAfter事件(在本程序集中去触发)14         /// 15         internal static void OnLogOnAfter()16         {17             if (LogOnAfter != null)18             {19                 LogOnAfter();20             }21         }22 23     }

而如果你希望在系统登陆时,去做一些事情,你可以先去订阅它就可以了,类型这种:

1               //lambda方式 2                 LogOnEvent.LogOnAfter += () => 3                 { 4                     //登陆后要处理的逻辑  5                 }; 6                 //匿名方法方式 7                 LogOnEvent.LogOnAfter += delegate() 8                 { 9                     //登陆后要处理的逻辑 10                 };11                 //普通方式12                 LogOnEvent.LogOnAfter += LogDiary;

转载于:https://www.cnblogs.com/ywsoftware/archive/2013/05/09/3068471.html

你可能感兴趣的文章
Windows 2003 服务器英文版本安装中文语言包
查看>>
非域环境下安装并配置Project Server 2007(三)
查看>>
Python 多进程开发与多线程开发
查看>>
Windows Server 2008 R2入门之用户管理
查看>>
技术演练_维护底层模块的变动自由度
查看>>
Tokyo Cabinet和Tokyo Tyrant简介
查看>>
攻克私有云通杀神器proxmox
查看>>
对比Windows 8模拟器(Simulator)和Windows Phone仿真器(Emulator)
查看>>
利用Shell开发跳板机功能脚本案例
查看>>
《Cisco交换机配置与管理完全手册》(第二版)前言和目录
查看>>
Javascript诞生记:C语言和Self语言X的产物
查看>>
你不是菜鸟(10):哥们儿,请放下大侠的“身段”
查看>>
SANS:2018年度事件响应调查报告
查看>>
微软云创益大赛颁奖仪式现场
查看>>
DPM2012系列之十九:配置辅助备份服务器
查看>>
xmanager5连接CENTOS6
查看>>
《微软云计算Microsoft Azure部署与管理指南》即将上市!!!
查看>>
SpreadJS纯前端表格控件V11.1震撼来袭
查看>>
SIEM期待实时安全分析
查看>>
各位最近找我索要CCNA200-120的资源的同志些
查看>>