using System.Collections.Generic;
public static void Main()
ConcreteSubject subject = new ConcreteSubject();
ConcreteObserver observer = new ConcreteObserver(subject);
subject.Attach(observer);
List<Observer> observers = new List<Observer>();
public void Attach(Observer observer)
public void Detach(Observer observer)
observers.Remove(observer);
foreach (var observer in this.observers)
class ConcreteSubject : Subject
public int SomeState { get; set; }
public abstract void Update();
class ConcreteObserver : Observer
public int ObserverState { get; set; }
ConcreteSubject MySubject { get; set; }
public ConcreteObserver(ConcreteSubject subject)
this.MySubject = subject;
public override void Update()
this.ObserverState = MySubject.SomeState;
Console.WriteLine("My state has been updated: " + this.ObserverState);