protected void ChangeState(T newState) { if (!Comparer <T> .Equals(current_state, newState)) { active_process.exit(); current_state = newState; SetProcess(newState); active_process.enter(); } }