您的位置:首页 > 其它

第十四回 基础才是重中之重~委托实例的几种定义方式(规规矩矩method,逻辑简单delegate,层次清晰lambda)

2013-05-09 10:36 344 查看
委托,一个不错的东西,.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;


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: