C#中的方法覆盖

Lac*_*ogy 1 .net c# virtual inheritance overriding

这是一个相当简单的问题,我有一个实现公共GUI元素的基类,以及一系列我想要覆盖给定方法的子类,因此它们可以在公共控件上实现自己的行为(即Prev和Next纽扣).

所以我有这个

public class MetalGUI : BaseGUI {
    new protected void OnGUI()
    {
        base.OnGUI();
        if(GUI.Button(prevRect, "BACK", "ButtonLeft"))
            OnPrev();

        if(GUI.Button(nextRect, "NEXT", "ButtonRight"))
            OnNext();

    }

    virtual protected void OnPrev(){}
    virtual protected void OnNext(){}
}
Run Code Online (Sandbox Code Playgroud)

这是其中一个子课程

public class MissionSelectGUI : MetalGUI {
    new void OnGUI()
    {
        base.OnGUI();
    }

    new protected void OnPrev()
    {
        Application.LoadLevel("mainMenu");
    }
    new protected void OnNext()
    {
        Application.LoadLevel("selectPlayer");
    }
}
Run Code Online (Sandbox Code Playgroud)

(这两个课程都被剥夺了对于这种情况不重要的东西)

问题是,当我有一个MissionSelectGUI实例化的成员时,调用on OnPrevOnNexton MetalGUI而不是覆盖方法.为什么是这样?

Eti*_*tel 9

因为new阴影(或隐藏)方法(它创建一个具有相同名称的方法).要覆盖它(从而在类'vtable中添加一个条目),请使用override.例如:

override protected void OnPrev()
{
    Application.LoadLevel("mainMenu");
}
Run Code Online (Sandbox Code Playgroud)