/* homegrown * ..> http://bryanallott.net/ * the multicast delegate appears to resurrect the * observer when an event is fired even if the observer * has been disposed */ using System; using System.Collections.Generic; namespace multicast { public class Subject { public delegate void EventHandler(string args); public event EventHandler FireEvent; public void OnFireEvent(string e) { if(null != FireEvent) FireEvent(e); } } public class ObserverA : IDisposable { private bool disposed = false; public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected void Dispose(bool disposing) { if(this.disposed) return; disposed = true; } ~ObserverA() { Dispose(false); } public void NotifyMe(string args) { Console.WriteLine(args); } } class MainClass { public static void Main(string[] args) { Subject source = new Subject(); using(ObserverA obsa = new ObserverA()) { source.FireEvent += new Subject.EventHandler(obsa.NotifyMe); } source.OnFireEvent("fire away!"); } } }