1

プーリングメカニズムによって常に状態を監視するシステムを実行しています。状態が別の状態に移行したら、さらに処理するために何かを行います。

私が思いついたのは、状態遷移に依存する EventHandler です。しかし、状態遷移を特定するには多くの条件が考えられることがわかりました。

(例: 初期 -> オン、オン -> オフ、オン -> 維持、維持 -> オン、...)

この問題を改善する良い方法はありますか? または何か提案はありますか?ありがとう!

class StateMonitor
{
    public delegate void Mydelegate();
    public event Mydelegate SomethingHappened;
    public string _state;
    public StateMonitor()
    {
        SomethingHappened += new Mydelegate(monitor);
        _state = "Initial";
    }
    public string state
    {
        get
        {
            return this._state;
        }
        set
        {
            string temp = value;
            if (SomethingHappened != null)
            {
                if(this.state =="Initial" &&  temp =="On") //state transition
                SomethingHappened();
            }
        }
    }
    public void monitor()
    {
        Console.WriteLine("Happened");
    }
}
4

2 に答える 2

0

おそらくenumあなたにとっては、次のような移行に対処するためStatesの署名の変更です。Delegate

class StateMonitor
{
    public enum States { initial, on, off, maintaining };
    public delegate void Mydelegate(States stFrom, States stTo);
    public event Mydelegate SomethingHappened;
    public States _state;

    public StateMonitor()
    {
        SomethingHappened += new Mydelegate(monitor);
        _state = States.initial;
    }
    public States state
    {
        get
        {
            return this._state;
        }
        set
        {
            if (SomethingHappened != null)
            {
                SomethingHappened(this._state, value);
            }
            _state = value;
        }
    }
    public void monitor(States stateFrom, States stateTo)
    {
        if (stateFrom == States.initial && stateTo == States.on)
        {
            // Do something for from Intitial state to On State
        }
        else if (stateFrom == States.on && stateTo == States.off)
        {
            // Do something for from On state to Off State
        }
        //... the rest of the code here
    }
}
于 2013-07-03T03:59:27.530 に答える