当全局游戏状态发生变化时,如何在所有派生类中调用函数?
public abstract class GameStateBehaviour {
public event EventHandler<GameStateEvents> StateChanged;
protected virtual void OnStateChanged(GameStateEvents e) {
// Call this function in all derived
}
}
答案 0 :(得分:1)
如果您想通知其他类有关状态更改的信息,请使用“观察者模式”(参见:http://en.wikipedia.org/wiki/Observer_pattern)。有两方:
试试这个:
class TheObject
{
public event EventHandler<GameStateEvents> StateChanged;
// If your object changes state, this function should be called. It informs all observers by invoking the StateChanged delegate.
protected virtual void OnStateChanged(GameStateEvents e)
{
if (StateChanged != null)
StateChanged(this, e);
}
}
class TheObserver
{
public TheObserver(TheObject o)
{
o.StateChanged += Object_StateChanged;
}
// This function is called by the object when the object changes state.
private void Object_StateChanged(object sender, GameStateEvents e)
{
}
}
答案 1 :(得分:0)
OnStateChanged
方法是应该触发StateChanged
事件的方法。不是处理此事件的方法。这就是我添加FunctionCalledWhenStateChanges
方法的原因。
public abstract class GameStateBehaviour
{
public event EventHandler<GameStateEvents> StateChanged;
protected GameStateBehaviour()
{
StateChanged += (sender, events) => FunctionCalledWhenStateChanges();
}
public virtual void FunctionCalledWhenStateChanges()
{
// The called function
}
protected void OnStateChanged(GameStateEvents e)
{
if (StateChanged != null) StateChanged(this, e);
}
}
上面的解决方案处理您自己的事件。我认为实现模板方法模式更好,而不是响应您自己的事件。但是我认为你不确定在哪里举办活动。