Mega Code Archive

 
Categories / C# Tutorial / Delegate
 

Advanced Event

using System; using System.Collections.Generic; using System.Text; delegate void NameChangedDelegate(string name, string newValue); class Program {     static void Main(string[] args)     {         Employee c = new Employee();         Subscriber s1 = new Subscriber(c, "subscriber-A");         Subscriber s2 = new Subscriber(c, "subscriber-B");         Subscriber s3 = new Subscriber(c, "subscriber-C");         c.FirstName = "F";         s2.Unsubscribe();         c.FirstName = "A";     } } class Subscriber {     public string SubscriberID = "new subscriber";     public Employee myEmployee = null;     public NameChangedDelegate ncDel = null;     public Subscriber(Employee c, string subId)     {         SubscriberID = subId;         ncDel = new NameChangedDelegate(myEmployee_OnNameChanged);         myEmployee = c;         myEmployee.OnNameChanged += ncDel;     }     void myEmployee_OnNameChanged(string name, string newValue)     {         Console.WriteLine("[{0}] Employee {1} changed to {2}.", SubscriberID,             name, newValue);     }     public void Unsubscribe()     {         myEmployee.OnNameChanged -= ncDel;     } } class Employee {     private string firstName;     private event NameChangedDelegate onNameChange;     public event NameChangedDelegate OnNameChanged     {         add         {             onNameChange += value;             if (value.Target is Subscriber)             {                 Console.WriteLine("Subscriber '{0}' just subscribed to OnNameChanged.",                     ((Subscriber)value.Target).SubscriberID);             }         }         remove         {             onNameChange -= value;             if (value.Target is Subscriber)             {                 Console.WriteLine("Subscriber '{0}' just un-subscribed from OnNameChanged.",                     ((Subscriber)value.Target).SubscriberID);             }         }     }     public string FirstName     {         get { return firstName; }         set         {             firstName = value;             onNameChange("firstname", value);         }     } }