Implementing Observer Pattern in C#