搜索
编程论坛
→
.NET专区
→
『 C# 论坛 』
→ [讨论]关于事件
标题:
[讨论]关于事件
只看楼主
幻风幻云
等 级:
新手上路
帖 子: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
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-15100-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 1.356329 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved