基础才是重中之重~委托实例的几种定义方式(规规矩矩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;

本文转自博客园张占岭(仓储大叔)的博客,原文链接:基础才是重中之重~委托实例的几种定义方式(规规矩矩method,逻辑简单delegate,层次清晰lambda,如需转载请自行联系原博主。

目录
相关文章
|
2月前
ES6的类的实例化过程和传统面向对象语言有什么区别?
ES6 的类的实例化过程更加简洁、直观,并且与现代编程理念更加契合,减少了一些传统面向对象语言中可能存在的复杂性和冗余性。
|
5月前
|
SQL 安全 Java
访问者模式问题之在上面的 SQL 结构定义中, sealed 接口的作用如何理解
访问者模式问题之在上面的 SQL 结构定义中, sealed 接口的作用如何理解
|
设计模式 存储 Java
JAVA设计模式11:组合模式,以统一的方式处理单个对象和组合对象
JAVA设计模式11:组合模式,以统一的方式处理单个对象和组合对象
182 0
|
设计模式 Java 数据库连接
JAVA设计模式8:装饰模式,动态地将责任附加到对象上,扩展对象的功能
JAVA设计模式8:装饰模式,动态地将责任附加到对象上,扩展对象的功能
|
Java C++
面对对象三大特性:封装、继承、多态
面对对象三大特性:封装、继承、多态
|
设计模式 前端开发 C#
C#开发中使用委托的作用和好处
先看概念,什么是委托? 从程序的角度来讲:你就可以把委托看成是用来执行方法(函数)的一个“指针” 通俗的说就是:通过委托,我们可以把方法当成参数传递。 这里我举个例子:“设想,如果我们写了一个厨师做菜的方法,里面有拿菜、切菜、配菜、炒菜四个步骤,但编写此方法代码的人想让配菜这个环节让调用方法的人来实现,换句话说,就是想把方法作为参数来传递,那么怎么来实现呢? 方法1:使用接口,这里不是我们讨论的。
7596 0
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
228 0
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 批量方法委托 )
【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 批量方法委托 )
148 0
【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 批量方法委托 )
|
Java 程序员
系统定义的异常类及其层次
Java程序中,由于程序员的疏忽和环境因素的变化,会经常出现异常情况,为了保证程序的正常运行,Java语言专门提供了异常处理机制; Java针对各种常见的异常定义了相应的异常类,并建立了异常类体系。
137 0
系统定义的异常类及其层次
【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他。
【类图】【命名空间】——————————————————【文件截图】   可能您会问,不就是弄个父类吗,怎么又是这么复杂呢?这个嘛,听我慢慢道来。 (类图里面Tree、Main1、DataDelete1、DataForm1、DataList1不是父类,而是共用页面)       这个是依据自然框架的特点来设置的,目的就是把共用的代码都放到父类里面,减轻子类的代码量。
907 0