Interface, abstract, override, virtual problem

Markus Freitag 3,791 Reputation points
2023-07-15T17:55:32.3633333+00:00

Hello,

Why can't I do that? Where is the error? No access? Problem is here.

	public void ActivateStateTest(IState state)
	{
		ActiveState = state;
	}

enter image description here

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"; }
    }

}
Developer technologies | ASP.NET | Other
Developer technologies | C#
0 comments No comments
{count} votes

Accepted answer
  1. Viorel 122.7K Reputation points
    2023-07-15T18:11:49.8866667+00:00

    Try adding public:

    public interface IState { ... }.

    1 person found this answer helpful.

0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.