我试图覆盖/重载已经在基类中覆盖的虚拟函数。为了更好地理解我想做什么,请查看以下示例:

public class Parent
{
    public virtual void foo() {
        print("Parent::foo()");
    }
}

public class Derived : Parent
{
    public override void foo() {
        print("Derived::foo()");
    }
}

public class Child : Derived
{
    public override void foo() {
        print("Child::foo()");
    }
}


// When I create an instance of Child and call the method foo,
// it calls the Derived::foo() method and not Child::foo()
// How can I make Child override Derived::foo()?


是否可以覆盖Derived :: foo()?如果没有,您如何建议我解决这个问题?

最佳答案

这在C#中调用Child::foo。试试这个代码:

class Program {
    static void Main()
    {
        Parent foo = new Child();
        foo.foo();
    }
}

// Define other methods and classes here
public class Parent
{
    public virtual void foo() {
        Console.WriteLine("Parent::foo()");
    }
}

public class Derived : Parent
{
    public override void foo() {
        Console.WriteLine("Derived::foo()");
    }
}

public class Child : Derived
{
    public override void foo() {
        Console.WriteLine("Child::foo()");
    }
}


这将运行并打印Child::foo()

09-10 13:20
查看更多