public static void Main()
var context = new Context();
public State State{get;set;}
State = new StateA(this);
public abstract class State
protected Context Context{get;set;}
public abstract void Handle();
protected abstract void ChangeState();
public class StateA: State
private bool changeState=false;
public StateA(Context context)
public override void Handle()
Console.WriteLine("This is handle method of StateA.");
protected override void ChangeState()
Context.State = new StateB(Context);
public class StateB: State
private bool changeState=false;
public StateB(Context context)
public override void Handle()
Console.WriteLine("This is handle method of StateB.");
protected override void ChangeState()
Context.State = new StateA(Context);