不清楚的继承

时间:2018-12-11 11:53:15

标签: c# unity3d inheritance

我正在Unity(C#)中进行游戏。我创建了一个继承自 GameEvent 的基类Shape和其他七个类( FinishStage InfoOnStart 等)。

GameEvent:

id

FinishStage:

public class GameEvent : MonoBehaviour {
    protected virtual void Start () {}

    public void ResetFields()
    {....
         Reset()
    }

    protected virtual void Reset(){}
}

InfoOnStart:

public class FinishStage : GameEvent {

    void OnTriggerEnter(Collider other){
        ResetFields();
   }

    protected override void Reset()
    {
        base.Reset();
        Restart();
    }

    protected void Restart()
    {
        //restart the game
    }

}

现在是要抓住的地方。 在场景中,我有1个 InfoOnStart 实例和1个 FinishStage 实例。

启动时, InfoOnStart 运行ResetFields()。 因为它没有自己的ResetFields()和Reser(),所以我希望它运行其父级的ResetFields()并从那里运行 GameEvent .Reset()。

但是由于某些原因, GameEvent .ResetFields()继续运行 FinishStage .Reset()并因此重新加载了整个场景。

我设法通过编写

来解决它
public class InfoOnStart : GameEvent {

    protected override void  Start () {
        base.Start();
        ResetFields();
    }
    /*
    protected override void Reset()
    {
        base.Reset();
    }
    */
}

InfoOnStart 中运行,然后运行 GameEvent 的重置。

但是为什么会这样呢? 为什么父级( GameEvent )不能运行自己的功能,而兄弟级( FinishStage )上却运行它的功能呢?

1 个答案:

答案 0 :(得分:1)

因为重写会从基类“替换”方法。如果您还希望调用基本方法,则必须通过重写方法中的base.Reset();对其进行显式显示