码迷,mamicode.com
首页 > 其他好文 > 详细

委托和事件

时间:2016-08-15 18:43:12      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

一、委托

  1:首先来看看委托的使用

    1)传统的委托使用的分为三步。

技术分享
 1         /// <summary>
 2         /// 定义委托
 3         /// </summary>
 4         /// <param name="x">变量 x</param>
 5         /// <param name="y">变量 y</param>
 6         /// <returns>返回一个 Int 值</returns>
 7         public delegate int IntDelegate(int x, int y);
 8         
 9         /// <summary>
10         /// Add 静态方法
11         /// </summary>
12         /// <param name="x">参数 x</param>
13         /// <param name="y">参数 y</param>
14         /// <returns>返回 Int 值</returns>
15         public static int Add(int x, int y)
16         {
17             return x + y;
18         }
19 
20         /// <summary>
21         /// 入口函数
22         /// </summary>
23         /// <param name="args"></param>
24         public static void Main(string[] args)
25         {
26             IntDelegate delegt = new IntDelegate(Add);
27             Console.WriteLine(delegt.Invoke(3, 9));
28         }
View Code

 

    2)以下的三种方式展示两步解决委托的使用

技术分享
 1         /// <summary>
 2         /// 实例化委托类
 3         /// </summary>
 4         public static void Test2()
 5         {
 6             IntDelegate delegt = delegate(int x, int y) { return x + y; };
 7             Console.WriteLine(delegt(4, 10));
 8         }
 9 
10         /// <summary>
11         /// 在上面的方法的基础上去掉 delegate
12         /// </summary>
13         public static void Test3()
14         {
15             IntDelegate delegt = (int x, int y) => { return x + y; };
16             Console.WriteLine(delegt.Invoke(4, 50));
17         }
18 
19         /// <summary>
20         /// 在上面的方法的基础上去掉 delegate 和 return 
21         /// </summary>
22         public static void Test4()
23         {
24             IntDelegate delegt = (x, y) => (x + y);
25             Console.WriteLine(delegt.Invoke(4, 50));
26         }
View Code

      

  2:再来看看 .NET 自己封装的委托— Action 、 Func 

    1)其区别: Action 是无返回值的;Func 是有返回值的,且返回值的类型是其最后一个参数类型(学艺不精,大牛请指教)

    2)下面是 Func 的使用,下面的例子只支持2个参数,但是同样支持4个参数

技术分享
 1         /// <summary>
 2         /// Add 静态方法
 3         /// </summary>
 4         /// <param name="x">参数 x</param>
 5         /// <param name="y">参数 y</param>
 6         /// <returns>返回 Int 值</returns>
 7         public static int Add(int x, int y)
 8         {
 9             return x + y;
10         }
11 
12         /// <summary>
13         /// Func 的使用,第三个Int 是返回值类型
14         /// </summary>
15         public static void Test5()
16         {
17             Func<int, int, int> func = (x, y) => Add(x, y);
18             Console.WriteLine(func.Invoke(102, 204));
19         }
View Code

    3)下面是 Action 的使用

技术分享
 1         /// <summary>
 2         /// Sub 静态方法
 3         /// </summary>
 4         /// <param name="x"></param>
 5         /// <param name="y"></param>
 6         public static void Sub(int x, int y)
 7         {
 8             Console.WriteLine(x - y);
 9         }
10 
11         /// <summary>
12         /// Action 的使用
13         /// </summary>
14         public static void Test6()
15         {
16             Action<int, int> action = Sub;
17             action.Invoke(101, 94);
18         }
View Code

 

二、事件

  待续。。。

 

细心的童鞋可能发现:

在调用的时候,我有时用委托构造方法,有时调用委托的虚方法 invoke 方法

其实是一样的,但是我还不知道为什么。。。  >..<...|| (大神指教)

 

  

      

委托和事件

标签:

原文地址:http://www.cnblogs.com/Jacob-Wu/p/5773760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!