C# 委托知识总结【转】

时间:2021-10-30 06:12:11

1.什么是委托,为什么要使用委托

我正在埋头苦写程序,突然想喝水,但是又不想自己去掉杯水而打断自己的思路,于是我就想让女朋友去给我倒水。她去给我倒水,首先我得让她知道我想让她干什么,通知她之后我可以继续写自己的程序,,而倒水的工作就交给了她。这样的过程就相当于一个委托。

在程序过程中,当程序正在处理某个事件的时候,我需要另外的程序代码去辅助处理一些事情,于是委托另一个程序模块去处理,而委托就可以达到这种目的,我可以利用委托通知另外的程序模块,该去调用哪个函数方法。委托其实就起到了这样一个作用,将函数签名传递到了另一个函数中。或许这样讲还是有些模糊,看看后面的具体实例。

2.委托的定义

delegate int Add(int num1,int num2);

delegate void ConvertNum(string result);

上面是定义两个委托的例子,其实很简单。声明一个委托使用delegate关键字,上面分别是定义的带返回值的委托和不带返回值的委托, 

两个委托都有传递参数,当然也可以不传递参数。其实委托也是一个类,委托派生为System.MulticastDelegate,而System.MulticastDelegate

又继承System.Delegate,如果你知道这个也就明白委托其实是一个特殊的类。

 1 public delegate string TeaDelegate(string spText);
 2 
 3     public class DelegateSource
 4     {
 5         public void TestDelegate()
 6         {
 7             Operator op = new Operator();
 8             TeaDelegate tea = new TeaDelegate(op.GetTea);
 9             Console.WriteLine("去给我倒杯水");
10             Console.WriteLine();
11             string result=tea("去给我倒杯水");
12             Thread.Sleep(5000);
13             Console.WriteLine(result);
14             Console.WriteLine();
15         }
16     }
17 
18     public class Operator
19     {
20         /// <summary>
21         /// 确定是否还有水
22         /// </summary>
23         private bool flag = true;
24 
25         public string GetTea(string spText)
26         {
27             if (spText == "去给我倒杯水")
28             {
29                 if (flag)
30                 {
31                     return "老公,茶来了";
32                 }
33                 else
34                 {
35                     return "老公,没有水了";
36                 }
37             }
38             return "等待.......";
39         }
40     }

输出结果

 

上面使用最普通的一种方式来定义了一个委托的使用,这个例子虽然很简单,但是能够很形象的描述委托的使用。

3.委托的三种形式

(1).推断