|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
.NET专区
→
『 C# 论坛 』
→ [讨论]关于事件
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
769
人关注过本帖
标题:
[讨论]关于事件
只看楼主
加入收藏
幻风幻云
等 级:
新手上路
帖 子:762
专家分:0
注 册:2005-1-14
楼主
收藏
问题点数:0 回复次数:5
[讨论]关于事件
订阅事件 和 发布事件
是怎么一回事?
2005-04-08 14:24
举报帖子
使用道具
赠送鲜花
live41
等 级:
贵宾
威 望:
67
帖 子:12442
专家分:0
注 册:2004-7-22
第
2
楼
收藏
得分:0
我也不知道。要联系上下文。
2005-04-08 20:28
举报帖子
使用道具
赠送鲜花
leeteng
等 级:
新手上路
帖 子:44
专家分:0
注 册:2005-1-7
第
3
楼
收藏
得分: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
等 级:
贵宾
威 望:
67
帖 子:12442
专家分:0
注 册:2004-7-22
第
4
楼
收藏
得分:0
怎么静哥编辑过呢?
2005-04-09 17:58
举报帖子
使用道具
赠送鲜花
幻风幻云
等 级:
新手上路
帖 子:762
专家分:0
注 册:2005-1-14
第
5
楼
收藏
得分:0
谢谢2楼
不过还是晕晕哦
2005-04-11 09:50
举报帖子
使用道具
赠送鲜花
leeteng
等 级:
新手上路
帖 子:44
专家分:0
注 册:2005-1-7
第
6
楼
收藏
得分:0
这个是将订阅者模式该成用代理实现的例子。其实在C#中的代理DELEGATE类似与C中的指针,不过DELEGATE是安全的,又不失其强大的功能。 你去窗口程序中看看 随便一个就有你说的订阅和发布事件。
2005-04-11 09:56
举报帖子
使用道具
赠送鲜花
6
1/1页
1
快速回复:
[讨论]关于事件
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.035758 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved