3,601 questions
Try adding public:
public interface IState { ... }.
This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Hello,
Why can't I do that? Where is the error? No access? Problem is here.
public void ActivateStateTest(IState state)
{
ActiveState = state;
}
The whole code.
public class StateMachine
{
IState ActiveState = null;
private MovingDown MD;// = new State1(this);
private MovingUp MU;// = new State2(this);
private Idle _Idle;// = new State3(this);
public StateMachine()
{
MD = new MovingDown(this);
MU = new MovingUp(this);
_Idle = new Idle(this);
}
public void ActivateState()
{
ActiveState = _Idle;
}
public void ActivateStateTest(IState state)
{
ActiveState = state;
}
public AbstractState GetActiveState()
{
return ActiveState as AbstractState;
}
public void RaiseUserUp()
{
ActiveState.RaiseUserUp();
}
public void RaiseUserDown()
{
ActiveState.RaiseUserDown();
}
public void RaisePosSensorUpperPosition()
{
ActiveState.RaisePosSensorUpperPosition();
}
public void RaisePosSensorLowerPosition()
{
ActiveState.RaisePosSensorLowerPosition();
}
}
namespace CAStateMachinePattern.Core
{
interface IState
{
void RaiseUserUp();
void RaiseUserDown();
void RaisePosSensorUpperPosition();
void RaisePosSensorLowerPosition();
String GetName();
}
public abstract class AbstractState : IState
{
protected StateMachine StateMachine;
public AbstractState(StateMachine stateMachine)
{
this.StateMachine = stateMachine;
}
public virtual void RaiseUserUp()
{
}
public virtual void RaiseUserDown()
{
}
public virtual void RaisePosSensorUpperPosition()
{
}
public virtual void RaisePosSensorLowerPosition()
{
}
public virtual String GetName() { return "Abstract"; }
}
public class MovingDown : AbstractState
{
public MovingDown(StateMachine stateMachine) : base(stateMachine)
{
}
public override void RaiseUserUp()
{
// stateMachine.activateState(new Idle(stateMachine));
}
public override void RaisePosSensorLowerPosition()
{
// stateMachine.activateState(new Idle(stateMachine));
}
public override String GetName() { return "MovingDown"; }
}
public class MovingUp : AbstractState
{
public MovingUp(StateMachine stateMachine) : base(stateMachine)
{
}
public override void RaiseUserDown()
{
// stateMachine.activateState(new Idle(stateMachine));
}
public override void RaisePosSensorUpperPosition()
{
// stateMachine.activateState(new Idle(stateMachine));
}
public override String GetName() { return "MovingUp"; }
}
public class Idle : AbstractState
{
public Idle(StateMachine stateMachine) : base(stateMachine)
{
}
public override void RaiseUserUp()
{
// stateMachine.activateState(new MovingDown(stateMachine));
}
public override void RaiseUserDown()
{
// stateMachine.activateState(new Idle(stateMachine));
}
public override String GetName() { return "Idle"; }
}
}
Try adding public:
public interface IState { ... }.