博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C# 中的委托和事件

Posted on 2010-11-29 22:26  EVON168  阅读(174)  评论(0编辑  收藏  举报

1.将方法作为方法的参数

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace DelegateV2
 6 {
 7     public delegate void Greetingdelegate(string name);
 8 
 9     public class Test
10     {
11         public static void EngGreeting(string name)
12         {
13             Console.WriteLine("英文版"+name);
14         }
15 
16         public static void ChineseGreeting(string name)
17         {
18             Console.WriteLine("中文版"+name);
19         }
20     }
21 
22     public class TestV2
23     {
24         public static void HanYuGreeting(string name)
25         {
26             Console.WriteLine("韩语版" + name);
27         }
28     }
29 
30     class Program
31     {
32         //将方法作为方法的参数
33         private static void GreetPeople(string name, Greetingdelegate greeting)
34         {
35             greeting(name);
36 
37         }
38 
39         static void Main(string[] args)
40         {
41             //测试1
42             GreetPeople("韩语版测试", TestV2.HanYuGreeting);
43             GreetPeople("中文版测试", Test.ChineseGreeting);
44             GreetPeople("英文版测试", Test.EngGreeting);
45 
46 
47             //测试2
48             string name = "-----测试";
49             GreetPeople(name, TestV2.HanYuGreeting);
50 
51             //测试3
52             Greetingdelegate delegate1 = TestV2.HanYuGreeting;//赋值
53             Greetingdelegate delegate2 = Test.EngGreeting;
54             GreetPeople(name, delegate1);
55             GreetPeople(name, delegate2);
56 
57             //测试4
58             Greetingdelegate delegate3 = TestV2.HanYuGreeting;//赋值的语法
59             delegate3 += Test.EngGreeting;//绑定的语法  ---------将方法绑定到委托
60 
61             GreetPeople("V4测试", delegate3);
62 
63             //测试5 -----取消绑定
64             delegate3 -= Test.EngGreeting;//取消绑定
65             GreetPeople("V5测试", delegate3);
66         }
67     }
68 }
69 

 

2.

可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法。


注意这里,第一次用的“=”,是赋值的语法;第二次,用的是“+=”,是绑定的语法。如果第一次就使用“+=”,将出现“使用了未赋值的局部变量”的编译错误。

使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。

 

参考链接:http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html