public class ValueChangedArgs : EventArgs
public readonly int OldV;
public readonly int NewV;
public ValueChangedArgs(int oldV, int newV)
public event EventHandler<ValueChangedArgs> onValueChanged = null;
private void valueChangedHandler(int oldV, int newV)
if (onValueChanged != null)
onValueChanged(this, new ValueChangedArgs(oldV, newV));
valueChangedHandler(temp, value);
public class ValueChangeObserver
public ValueChangeObserver(MyValue v)
v.onValueChanged += myOnValueChanged;
private void myOnValueChanged(object sender, ValueChangedArgs args)
Console.WriteLine("Value changed by {0}", args.NewV - args.OldV);
public class ValueAverageChangeObserver
private int sum = 0, count = 0;
public ValueAverageChangeObserver(MyValue v)
v.onValueChanged += myOnValueChanged;
private void myOnValueChanged(object sender, ValueChangedArgs args)
sum += args.NewV - args.OldV;
Console.WriteLine("Value average change is {0:F}",(double)sum / (double)count);
public void Main(string[] args)
MyValue v = new MyValue();
new ValueChangeObserver(v);
new ValueAverageChangeObserver(v);