using
System;
using System.Collections;
using System.Reflection;
// Delegate
delegate void UpdateDelegate();
// Subject
class Subject
... {
public event UpdateDelegate UpdateHandler;
// Methods
public void Attach(UpdateDelegate ud)
...{
UpdateHandler += ud;
}
public void Detach(UpdateDelegate ud)
...{
UpdateHandler -= ud;
}
public void Notify()
...{
Console.WriteLine("-------------------------");
if (UpdateHandler != null) UpdateHandler();
Console.WriteLine("-------------------------");
}
}
// "ConcreteObserver"
class Observer
... {
// Methods
public static void Show()
...{
Console.WriteLine("Observer got an Notification!");
}
}
class AnotherObserver
... {
// Methods
public static void Show()
...{
Console.WriteLine("AnotherObserver got an Notification!");
}
}
class Instantce
... {
public void Show()
...{
Console.WriteLine("Instantce got an Notification!");
}
}
public class Client
... {
public static void Main(string[] args)
...{
Subject a = new Subject();
a.UpdateHandler += new UpdateDelegate(Observer.Show);
a.UpdateHandler += new UpdateDelegate(AnotherObserver.Show);
a.UpdateHandler += new UpdateDelegate(AnotherObserver.Show);
Instantce ins = new Instantce();
a.UpdateHandler += new UpdateDelegate(ins.Show);
Type t = a.GetType();
FieldInfo eventsPropertyInfo = t.GetField("UpdateHandler", BindingFlags.Instance | BindingFlags.NonPublic);
UpdateDelegate eventHanlderList = eventsPropertyInfo.GetValue(a) as UpdateDelegate;
Delegate[] dl = eventHanlderList.GetInvocationList();
foreach (Delegate d in dl)
...{
// look up the contents in Delegate
Console.WriteLine(d.Method.DeclaringType.ToString() + "." + d.Method.Name);
// Detach event handler
a.Detach((UpdateDelegate)d);
}
a.Notify();
}
}
using System.Collections;
using System.Reflection;
// Delegate
delegate void UpdateDelegate();
// Subject
class Subject
... {
public event UpdateDelegate UpdateHandler;
// Methods
public void Attach(UpdateDelegate ud)
...{
UpdateHandler += ud;
}
public void Detach(UpdateDelegate ud)
...{
UpdateHandler -= ud;
}
public void Notify()
...{
Console.WriteLine("-------------------------");
if (UpdateHandler != null) UpdateHandler();
Console.WriteLine("-------------------------");
}
}
// "ConcreteObserver"
class Observer
... {
// Methods
public static void Show()
...{
Console.WriteLine("Observer got an Notification!");
}
}
class AnotherObserver
... {
// Methods
public static void Show()
...{
Console.WriteLine("AnotherObserver got an Notification!");
}
}
class Instantce
... {
public void Show()
...{
Console.WriteLine("Instantce got an Notification!");
}
}
public class Client
... {
public static void Main(string[] args)
...{
Subject a = new Subject();
a.UpdateHandler += new UpdateDelegate(Observer.Show);
a.UpdateHandler += new UpdateDelegate(AnotherObserver.Show);
a.UpdateHandler += new UpdateDelegate(AnotherObserver.Show);
Instantce ins = new Instantce();
a.UpdateHandler += new UpdateDelegate(ins.Show);
Type t = a.GetType();
FieldInfo eventsPropertyInfo = t.GetField("UpdateHandler", BindingFlags.Instance | BindingFlags.NonPublic);
UpdateDelegate eventHanlderList = eventsPropertyInfo.GetValue(a) as UpdateDelegate;
Delegate[] dl = eventHanlderList.GetInvocationList();
foreach (Delegate d in dl)
...{
// look up the contents in Delegate
Console.WriteLine(d.Method.DeclaringType.ToString() + "." + d.Method.Name);
// Detach event handler
a.Detach((UpdateDelegate)d);
}
a.Notify();
}
}