using System.Collections.Generic;
public static void Main()
Observed od = new Observed();
Observer or = new Observer();
Observer2 or2 = new Observer2();
public class ObservableObject
public static void NotifyPropertyChanged(object sender, object propertyValue, EventHandler<CustomEventArgs> handlerDelegate)
CustomEventArgs e = new CustomEventArgs();
e.PropertyValue = propertyValue;
if(handlerDelegate != null)
handlerDelegate(sender, e);
public class CustomEventArgs : EventArgs
public object PropertyValue {get; set;}
public class Observed : ObservableObject
public static event EventHandler<CustomEventArgs> IntChanged;
get{ return _observedInt;}
if(value != _observedInt)
NotifyPropertyChanged(this, value, IntChanged);
public static event EventHandler<CustomEventArgs> ObjectChanged;
public object ObservedObject
get{ return _observedObject;}
if(value != _observedObject)
NotifyPropertyChanged(this, value, ObjectChanged);
Observed.IntChanged += OnIntChange;
Console.WriteLine("Hello World");
public void OnIntChange(object sender, CustomEventArgs e)
Console.WriteLine("sender: {0}. Value: {1} {2}", sender.ToString(), e.PropertyValue.ToString(), e.PropertyValue.GetType());
Observed.ObjectChanged += OnObjectChange;
Console.WriteLine("Hello World");
public void OnObjectChange(object sender, CustomEventArgs e)
Console.WriteLine("sender: {0}. Value: {1} {2}", sender.ToString(), e.PropertyValue.ToString(), e.PropertyValue.GetType());