码迷,mamicode.com
首页 > Windows程序 > 详细

C#学习第九弹之委托

时间:2015-05-18 20:14:51      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

先上委托的例子:

 1 using System;
 2 
 3 delegate int myDelegateHandler(int a, int b);
 4 
 5 public class A
 6 {
 7     //静态方法
 8     public static int M1(int a, int b)
 9     {
10         return a + b;
11     }
12 }
13 
14 public class Test
15 {
16     public static void Main()
17     {
18         //实例一个委托
19         myDelegateHandler tmp = new myDelegateHandler(A.M1);
20         //调用委托
21         int sum = tmp(1, 3);
22         Console.WriteLine(sum.ToString());
23 
24     }
25 }

委托的好处:提高可扩展性!

委托其实是一个类,定义了方法的类型,使得可以把方法当作另外一个方法的参数来进行传递,这样可以实现动态赋参数,有时可以避免大量分支结构(if-else),使得程序具有良好的可扩展性。说的这里,想必大家已经清楚了“委托”的含义了吧。

再举个例子:List<T>类型的Find方法的参数也是一个委托,它把“怎么去查找”或者说“怎么样才算找到”这个问题留给了开发人员。开发人员只需要定义一个参数为T,返回值为布尔型的函数,实现函数体,并将函数作为参数传给Find方法,就可以完成集合中元素的查找。

了解C++ STL的可能会联想到:sort这个函数,允许用户自定义比较函数,道理是类似的,不过C++里面并不叫委托,但是传递函数的思想是一致的。

 

委托链:

 1 using System;
 2 
 3 public class FuWuYuan
 4 {
 5     public static void BuyTicket()
 6     {
 7         Console.WriteLine("每次都让我去买票,囧");
 8     }
 9 
10     public static void BuyMovieTicket()
11     {
12         Console.WriteLine("而且还要让我带电影票,囧");
13     }
14 }
15 
16 class LaoBan
17 {
18     public delegate void BugTicketEventHandler();
19 
20     public static void Main(string[] args)
21     {
22         BugTicketEventHandler myDelegate = new BugTicketEventHandler(FuWuYuan.BuyTicket);
23         myDelegate += FuWuYuan.BuyMovieTicket;
24         myDelegate();
25     }
26 }

其实就是让同一个人“做多件事情!”。

C#学习第九弹之委托

标签:

原文地址:http://www.cnblogs.com/huoxiayu/p/4512752.html

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