public class StateController
public State currentState;
public FirstState firstState;
public SecondState secondState;
firstState = new FirstState(this);
secondState = new SecondState(this);
currentState = firstState;
public void ChangeState(State newState)
public abstract class State
protected StateController sc;
public virtual void Exit()
Console.WriteLine("Exiting");
public virtual void Enter()
Console.WriteLine("Entering");
public class FirstState : State
public FirstState(StateController stateController)
public override void Enter()
Console.WriteLine("First"); sc.ChangeState(sc.secondState);
public class SecondState : State
public SecondState(StateController stateController)
public override void Enter()
Console.WriteLine(counter);
sc.ChangeState(sc.firstState);
else{Console.WriteLine("Last");}
public static void Main()
Console.WriteLine("Helo Wrld");
StateController stateController = new StateController();