小能豆

C#中基类以Virtual或Abstract修饰的方法,子类继承时,可以以Override修饰重写其实现。但是多层继承时,子类Override重写的是父类的Override方法还是基类的Virtual或Abstract方法

javascript

C#中基类以Virtual或Abstract修饰的方法,子类继承时,可以以Override修饰重写其实现。但是多层继承时,子类Override重写的是父类的Override方法还是基类的Virtual或Abstract方法


阅读 57

收藏
2024-06-12

共1个答案

小能豆

在 C# 中,当子类继承了一个基类,并且基类中的方法被标记为 virtualabstract,然后在子类中使用 override 关键字重写该方法时,子类将会重写基类中的 virtualabstract 方法。这意味着子类重写的是基类中的方法,而不是父类(即子类的基类)中已经重写的方法。

考虑以下示例:

public class BaseClass
{
    public virtual void VirtualMethod()
    {
        Console.WriteLine("BaseClass VirtualMethod");
    }
}

public class ParentClass : BaseClass
{
    public override void VirtualMethod()
    {
        Console.WriteLine("ParentClass Override VirtualMethod");
    }
}

public class ChildClass : ParentClass
{
    public override void VirtualMethod()
    {
        Console.WriteLine("ChildClass Override VirtualMethod");
    }
}

在这个例子中,ChildClass 继承自 ParentClass,而 ParentClass 继承自 BaseClassBaseClass 中的 VirtualMethod 方法被标记为 virtualParentClass 中重写了这个方法,而 ChildClass 又重写了 ParentClass 中的方法。

当您创建 ChildClass 的实例并调用 VirtualMethod 方法时,将会调用 ChildClass 中的重写实现。因此,输出将是:

ChildClass Override VirtualMethod

这表明,子类重写的是基类中的方法,而不是父类中已经重写的方法。

2024-06-12