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