基础才是重中之重~委托实例的几种定义方式(规规矩矩method,逻辑简单delegate,层次清晰lambda
委托,一个不错的东西,.net中的委托用着挺爽,它的重要性以至于微软把它单拿出来,定义了几个现成的委托,如,Func和Action,既然人家把最特殊的委托签名拿 出来了,所以咱们就不
自己去定义了,就用Func和Action委托去讲一个如何定义他们的实例吧,呵呵。
第一 规规矩矩定义方法method
1 /// <summary> 2 /// 与Func<string>相同的方法签名 3 /// </summary> 4 /// <returns></returns> 5 static string StandardFunc() { return "标准点好"; } 6 Func<string> Standard = new Func<string>(StandardFunc);//标准的委托实例
第二 逻辑简单匿名方法delegate
在对于方法逻辑简单的时候,我们没有必须再去定义一个额外的方法,而直接使用匿名方法即可
1 Func<string, bool> FuncWhat2 = delegate(string s) { return s == "hello"; };//delegate定义一个匿名方法,不用重新再定义一个方法了
1 Func<bool> FuncWhat3 = delegate() { return true; };
第三 层次清晰lambda
同样的逻辑简单,使用lambda表达式则会使代码层次感更清晰,本人超级推荐,呵呵
1 Func<string, string> 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<string> errorMessageAccessor);
上面我只是一个简单的举例,在实际开发时,还要因情况而定,下面是在实现项目中的一个应用,当用户登陆时,去触发一个LogOn事件,然后,所以订阅了它的方法都自动去处理自己的
逻辑,看代码:
1 /// <summary> 2 /// 登陆事件 3 /// </summary> 4 public class LogOnEvent 5 { 6 7 /// <summary> 8 /// 登陆后的事件 9 /// </summary> 10 public static event Action LogOnAfter; 11 12 /// <summary> 13 /// 触发RegisterAfter事件(在本程序集中去触发) 14 /// </summary> 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;
分类:
其它 / ASP.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示