为什么在C#中调用Grand parent虚函数

rah*_*hul 1 c# oop

我有以下代码.任何人都可以回答为什么调用base-show方法而不是在这种情况下调用derive-show.在这种情况下,如何为derive和基类的show函数进行内存分配.

class OverrideAndNew : Derive
{

    public static void Main()
    {
        Derive obj = new Derive1();
        obj.Show();

        Console.ReadLine();
    }
}

class Base
{
    public virtual void Show()
    {
        Console.WriteLine("Base - Show");
    }
}

class Derive : Base
{
    protected virtual void Show()
    {
        Console.WriteLine("Derive - Show");
    }
}

class Derive1 : Derive
{
    protected override void Show()
    {
        Console.WriteLine("Derive1 - Show");
    }
}
Run Code Online (Sandbox Code Playgroud)

nvo*_*igt 5

因为你打电话给它.覆盖方法时,无法修改访问修饰符.所以基本上,Derive1超越了Derive的Show方法.但是从来没有超过Base的那个.所以只有一个公共Show方法,一个在Base中实现.

你可能想做的是:

class OverrideAndNew
{
    public static void Main()
    {
        Derive obj = new Derive1();
        obj.Show();

        Console.ReadLine();
    }
}

class Base
{
    public virtual void Show()
    {
        Console.WriteLine("Base - Show");
    }
}

class Derive : Base
{
    public override void Show()
    {
        Console.WriteLine("Derive - Show");
    }
}

class Derive1 : Derive
{
    public override void Show()
    {
        Console.WriteLine("Derive1 - Show");
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,方法签名保持不变.它总是公开的,因为Base说它必须是公开的.它总是相同的名称,返回类型和参数(在这种情况下没有).