您的位置:首页 > 编程语言 > C#

C#委托、事件

2012-09-04 16:33 176 查看
委托就是定义了方法的模板,委托对于方法就像接口对于类,接口定义了类的一些方法模板,委托的意思是你这个方法

要想委托我做事情呢,就必须遵守我的规矩(返回值、参数类型一致),否则我不睬你。

定义事件的时候用到了委托的名称,例如public event SayHello SayHelloM,这里的SayHello 是委托的名称,这个定

义是说我这个事件只跟这个委托打交道,其他的委托和我没有任何关系,一旦本人(event)有事情发生的时候我就委托给

SayHello,具体怎么做,那是SayHello的事,和我无关,我只注重SayHello办事的结果,有点像黑社会老大叫小弟去做

什么事情,他才不管你怎么做,只要事情能办成就OK。当然了,可能这个老大有很多事情要做,那么可以都委托给这个

小弟去做,小弟说:让我做事是吧,那你得遵守我的规矩(这谁是老大呢?哈哈)。

下面我们看一个简单的例子:

View Code

1 public delegate void GreetingDelegate(string name);
2
3 public class GreetManager
4 {
5 //此处使用事件属性实现封装,实质是进行事件的声明
6 //这里说明了声明事件就是对委托类型的变量进行封装
7 //该委托变量在编译时会被编译成私有字段
8 public event GreetingDelegate MakeGreet;
9
10 public void GreetPeople(string name)
11 {
12 if (MakeGreet != null) //如果有方法注册委托变量
13 {
14 MakeGreet(name); //通过委托调用方法
15 }
16 }
17 }
18
19 class Program
20 {
21 private static void EnglishGreeting(string name)
22 {
23 Console.WriteLine("Hello," + name);
24 }
25
26 private static void ChineseGreeting(string name)
27 {
28 Console.WriteLine("你好," + name);
29 }
30 public static void Main(string[] args)
31 {
32 GreetManager manager = new GreetManager();
33 //manager.MakeGreet = ChineseGreeting; //这样写编译错误,因为MakeGreet在编译时被编译为私有变量,所以不允许赋值
34 manager.MakeGreet += ChineseGreeting;
35 manager.MakeGreet += EnglishGreeting;
36 manager.GreetPeople("张三");
37
38 Console.ReadKey();
39 }
40 }
分析:略
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: