| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 769 人关注过本帖
标题:[讨论]关于事件
只看楼主 加入收藏
幻风幻云
Rank: 1
等 级:新手上路
帖 子:762
专家分:0
注 册:2005-1-14
收藏
 问题点数:0 回复次数:5 
[讨论]关于事件
订阅事件 和 发布事件
是怎么一回事?
2005-04-08 14:24
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
我也不知道。要联系上下文。
2005-04-08 20:28
leeteng
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2005-1-7
收藏
得分:0 
using System; //Delegate delegate void UpdateDelegate(); class Subject { public event UpdateDelegate UpdateHandler; //订阅事件 public void Attach( UpdateDelegate ud ) { UpdateHandler += ud; } public void Detach( UpdateDelegate ud ) { UpdateHandler -= ud; } //发布事件 public void Notify() { if(UpdateHandler != null) UpdateHandler(); } } class ConcreteSubject : Subject { private string subjectState; public string SubjectState { get{ return subjectState; } set{ subjectState = value; } } } class ConcreteObserver { private string name; private string observerState; private ConcreteSubject subject; public ConcreteObserver( ConcreteSubject subject, string name ) { this.subject = subject; this.name = name; } public void Update() { observerState = subject.SubjectState; Console.WriteLine( "Observer {0}'s new state is {1}", name, observerState ); } public ConcreteSubject Subject { get { return subject; } set { subject = value; } } } class AnotherObserver { public void Show() { Console.WriteLine("AnotherObserver got an Notification!"); } } public class Client { public static void Main(string[] args) { ConcreteSubject s = new ConcreteSubject(); ConcreteObserver o1 = new ConcreteObserver(s, "1"); ConcreteObserver o2 = new ConcreteObserver(s, "2"); AnotherObserver o3 = new AnotherObserver(); s.Attach(new UpdateDelegate(o1.Update)); s.Attach(new UpdateDelegate(o2.Update)); s.Attach(new UpdateDelegate(o3.Show)); s.SubjectState = "ABC"; s.Notify(); Console.WriteLine("--------------------------"); s.Detach(new UpdateDelegate(o1.Update)); s.SubjectState = "DEF"; s.Notify(); } }

[此贴子已经被静夜思于2005-4-9 17:37:32编辑过]

2005-04-09 13:54
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
怎么静哥编辑过呢?
2005-04-09 17:58
幻风幻云
Rank: 1
等 级:新手上路
帖 子:762
专家分:0
注 册:2005-1-14
收藏
得分:0 
谢谢2楼

不过还是晕晕哦

2005-04-11 09:50
leeteng
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2005-1-7
收藏
得分:0 
这个是将订阅者模式该成用代理实现的例子。其实在C#中的代理DELEGATE类似与C中的指针,不过DELEGATE是安全的,又不失其强大的功能。 你去窗口程序中看看 随便一个就有你说的订阅和发布事件。
2005-04-11 09:56
快速回复:[讨论]关于事件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.059752 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved