[讨论]关于事件
订阅事件 和 发布事件是怎么一回事?
2005-04-08 14:24
2005-04-08 20:28

//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
2005-04-09 17:58
2005-04-11 09:50
2005-04-11 09:56