如何在超级类和子类的方法之间跳转
本文关键字:方法 之间 子类 | 更新日期: 2023-09-27 18:32:53
如果我有一个像状态机一样的类,Foo是这样的:
public class Foo
{
public virtual State Update()
{
switch (CurrentState)
{
case State.Start:
if (!WatingForData())
CurrentState = State.GotData;
break;
case State.GotData:
if (something else)
....
break;
}
return CurrentState;
}
}
处理一般步骤。
派生类 Bar 将具有另一个用于各个步骤的状态机这样:
public class Bar : Foo
{
public override State Update()
{
switch (CurrentState)
{
case State.GetData:
if (GotData())
CurrentState = State.GotData;
break;
case State.GotData:
if (ProcessData())
CurrentState = base.State.GotData;
break;
}
return CurrentState;
}
}
我想实现这样的事情;
while(!Foo.State == State.Done)
{
Thread.Sleep(10);
Foo.Update()
}
程序首先转到 Bar.Update() 并处理所有单独的(子)步骤,完成后继续进入 Foo.Update()。
鉴于我当前的代码,我必须将 Foo 的状态更改为新的(而不是虚拟的)并做类似的事情;
while(!Foo.State == State.Done)
{
Thread.Sleep(10);
if(Bar.State == Bar.State.Done)
{
((Foo)Bar).Update()
}
else
{
Foo.Update();
}
}
不知道我如何以更清洁的方式做到这一点。我想知道是否有更好的方法来处理具有子状态的状态机?如能举例说明,将不胜感激。
您可以更改Bar.Update
以调用base.Update
:
public override State Update()
{
// sub steps:
switch (CurrentState)
{
case State.GetData:
if (GotData())
CurrentState = State.GotData;
break;
case State.GotData:
if (ProcessData())
CurrentState = base.State.GotData;
break;
}
// proceed to Foo.Update:
return base.Update();
}