Recursive delegate and state pattern (C# version)

来源:互联网 发布:淘宝摄影服务商 编辑:程序博客网 时间:2024/05/19 12:28
The concept is originated from "Practise StateCharts in C++", where author use member function pointer to represent state pattern.

c# version, more easy to illustrate
/////////////////////////////////////////////

public delegate MyStateProc MyStateProc(object sender);

MyStateProc StateOpen(object sender)
{
    if (sender.ToString() == "SEND")
        return new MyStateProc(StateSend);
    else
        return new MyStateProc(StateReceive);
}

MyStateProc StateSend(object sender)
{
    MessageBox.Show("Send message: " + sender.ToString());
    return null;
}

MyStateProc StateReceive(object sender)
{
    MessageBox.Show("Receive message: " + sender.ToString());
    return null;
}

private void button1_Click(object sender, System.EventArgs e)
{
    string Flag = "SEND";
    MyStateProc firstState = new MyStateProc(StateOpen);
    MyStateProc nextState = (MyStateProc)
        firstState.Method.Invoke(this, new object[]{Flag});
    nextState.Method.Invoke(this, new object[]{"Hello, delegate!"});
}
原创粉丝点击