什么是事件不多讲了,直入主题让我们来看看事件中的两个角色:
一:事件发行者(Publisher):一个事件发行者,也称作发送者(sender),其实就是一个对象,这个
对象会自行维护本身的状态信息。当本身状态信息变动时,便会触发一个事件,并通知所有的事件
订阅者。
二:事件订阅者(subscriber):对事件感兴趣的对象,也叫做接受者(receiver),可以注册感兴趣的
事件,通常需提供一个事件处理程序,在事件发行者触发一个事件后,会自动执行这段代码的内容
下面通过讲故事来理解事件
订阅者到出版社订阅报刊,报刊一旦发行就会送到订阅者手中。
在这个故事中,图书的出版就是事件,出版局就是事件的发行者,订户是事件的订阅者。
1using System;
2using System.Collections.Generic;
3
4namespace evnt
5{
6 class Publisher //出版社
7 {
8 public delegate void Publish(); //事件所需的代理
9 public event Publish OnPublish=null;//事件的声明
10 public void issu() //触发事件的方法
11 {
12 if(OnPublish!=null)
13 {
14 Console.WriteLine("发行刊物");
15 OnPublish();
16 Console.ReadLine();
17 }
18 }
19 }
20
21 class Subscriber //订阅者
22 {
23 public void Receive()//在事件订阅者中定义事件处理程序
24 {
25 Console.WriteLine("订阅者已经收到了刊物");
26 }
27 }
28
29 class Story //故事发生在订阅者和出版社之间
30 {
31 static void Main()
32 {
33 Publisher Pub=new Publisher();
34 Subscriber zs=new Subscriber();
35 Pub.OnPublish+=new Publisher.Publish(zs.Receive);//向事件发行者订阅一个事件
36 //事件发行者收到一个事件
37 Pub.issu(); //收到事件后做出的处理
38 }
39 }
40}
41
2using System.Collections.Generic;
3
4namespace evnt
5{
6 class Publisher //出版社
7 {
8 public delegate void Publish(); //事件所需的代理
9 public event Publish OnPublish=null;//事件的声明
10 public void issu() //触发事件的方法
11 {
12 if(OnPublish!=null)
13 {
14 Console.WriteLine("发行刊物");
15 OnPublish();
16 Console.ReadLine();
17 }
18 }
19 }
20
21 class Subscriber //订阅者
22 {
23 public void Receive()//在事件订阅者中定义事件处理程序
24 {
25 Console.WriteLine("订阅者已经收到了刊物");
26 }
27 }
28
29 class Story //故事发生在订阅者和出版社之间
30 {
31 static void Main()
32 {
33 Publisher Pub=new Publisher();
34 Subscriber zs=new Subscriber();
35 Pub.OnPublish+=new Publisher.Publish(zs.Receive);//向事件发行者订阅一个事件
36 //事件发行者收到一个事件
37 Pub.issu(); //收到事件后做出的处理
38 }
39 }
40}
41
故事2:张三订阅《生活》杂志和李四订阅《生活》《电脑》2本杂志,一年后由于经济危机李四退订了《电脑》杂志
首先我们定义事件发行者(Publisher)
1class Publisher //出版社
2 {
3 public delegate void PubComputer(string magazineName); //事件所需的代理 委托是种类
4 public delegate void PubLife(string magazineName);
5 public event PubComputer OnPubComputer=null;//事件的声明
6 public event PubLife OnPubLife=null;
7 public void issuComputer() //触发电脑杂志发行事件的方法
8 {
9 if(OnPubComputer!=null)
10 {
11 Console.WriteLine("发行《电脑》杂志");
12 OnPubComputer("《电脑》杂志"); //必须和事件代理参数一致
13 Console.ReadLine();
14 }
15 }
16
17 public void issuLife()
18 {
19 if(OnPubLife!=null)
20 {
21 Console.WriteLine("发行《生活》杂志");
22 OnPubLife("《生活》杂志");
23 Console.ReadLine();
24 }
25 }
26 }
2 {
3 public delegate void PubComputer(string magazineName); //事件所需的代理 委托是种类
4 public delegate void PubLife(string magazineName);
5 public event PubComputer OnPubComputer=null;//事件的声明
6 public event PubLife OnPubLife=null;
7 public void issuComputer() //触发电脑杂志发行事件的方法
8 {
9 if(OnPubComputer!=null)
10 {
11 Console.WriteLine("发行《电脑》杂志");
12 OnPubComputer("《电脑》杂志"); //必须和事件代理参数一致
13 Console.ReadLine();
14 }
15 }
16
17 public void issuLife()
18 {
19 if(OnPubLife!=null)
20 {
21 Console.WriteLine("发行《生活》杂志");
22 OnPubLife("《生活》杂志");
23 Console.ReadLine();
24 }
25 }
26 }
这里面有两个触发事件的方法issuComputer和issuLife;
接着定义事件的订阅者(接受者)
1class Subscriber //订阅者
2 {
3 private string name;
4 public Subscriber(string name)
5 {
6 this.name=name;
7 }
8 public void Receive(string magazineName)//在事件订阅者中定义事件处理程序
9 {
10 Console.WriteLine(name+"已经收到了"+magazineName);
11 }
12 }
2 {
3 private string name;
4 public Subscriber(string name)
5 {
6 this.name=name;
7 }
8 public void Receive(string magazineName)//在事件订阅者中定义事件处理程序
9 {
10 Console.WriteLine(name+"已经收到了"+magazineName);
11 }
12 }
Receive方法通过委托方式,在事件触发时自动执行
最后我们就可以演义出版商(publisher)和订户(subcriber)之间的故事(story)了
1class Story //故事发生在订阅者和出版社之间
2 {
3 static void Main()
4 {
5 Publisher Pub=new Publisher();
6 Subscriber zs=new Subscriber("张三");
7 Pub.OnPubLife+=new Publisher.PubLife(zs.Receive);//张三订阅生活杂志
8 Subscriber ls=new Subscriber("李四");//李四也订阅了电脑、生活杂志
9 Pub.OnPubComputer+=new Publisher.PubComputer(ls.Receive);
10 Pub.OnPubLife+=new Publisher.PubLife(zs.Receive);
11 Pub.issuComputer(); //收到事件后做出的处理
12 Pub.issuLife();
13 //一年后张三由于经济危机取消了《生活》杂志的订阅
14 Console.WriteLine("一年后经济危机");
15 Pub.OnPubLife-=new Publisher.PubLife(zs.Receive);
16 Pub.issuComputer();
17 Pub.issuLife();
18 }
19 }
转载自:http://www.cnblogs.com/hemood/archive/2008/11/27/1342582.html#1385050
2 {
3 static void Main()
4 {
5 Publisher Pub=new Publisher();
6 Subscriber zs=new Subscriber("张三");
7 Pub.OnPubLife+=new Publisher.PubLife(zs.Receive);//张三订阅生活杂志
8 Subscriber ls=new Subscriber("李四");//李四也订阅了电脑、生活杂志
9 Pub.OnPubComputer+=new Publisher.PubComputer(ls.Receive);
10 Pub.OnPubLife+=new Publisher.PubLife(zs.Receive);
11 Pub.issuComputer(); //收到事件后做出的处理
12 Pub.issuLife();
13 //一年后张三由于经济危机取消了《生活》杂志的订阅
14 Console.WriteLine("一年后经济危机");
15 Pub.OnPubLife-=new Publisher.PubLife(zs.Receive);
16 Pub.issuComputer();
17 Pub.issuLife();
18 }
19 }