从父级调用子类方法

use*_*494 13 c# oop polymorphism inheritance overriding

是否有可能a.doStuff()方法在不编辑A类的情况下打印"B did stuff"?如果是这样,我该怎么做?

class Program
{
    static void Main(string[] args)
    {
        A a = new A();
        B b = new B();

        a.doStuff();
        b.doStuff();

        Console.ReadLine();
    }
}

class A
{
    public void doStuff()
    {
        Console.WriteLine("A did stuff");
    }
}

class B : A
{
    public void doStuff()
    {
        Console.WriteLine("B did stuff");
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在修改一个蒸汽游戏,Terraria.而且我不想反编译并重新编译它们,因为那会搞砸蒸汽.我的程序通过XNA"注入"Terraria.我可以使用XNA中的update()和draw()方法修改一些东西.但它非常有限.我不想覆盖基本方法来修改更多东西(例如worldgen).

Ali*_*tad 17

是的,如果您声明doStuffvirtualin in A然后overridein B.

class A
{
    public virtual void doStuff()
    {
        Console.WriteLine("A did stuff");
    }
}

class B : A
{
    public override void doStuff()
    {
        Console.WriteLine("B did stuff");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 由于A.doStuff只是被覆盖,所以它应该是抽象的而不是虚拟的. (2认同)