C#中基类以Virtual或Abstract修饰的方法,子类继承时,可以以Override修饰重写其实现。但是多层继承时,子类Override重写的是父类的Override方法还是基类的Virtual或Abstract方法
在 C# 中,当子类继承了一个基类,并且基类中的方法被标记为 virtual 或 abstract,然后在子类中使用 override 关键字重写该方法时,子类将会重写基类中的 virtual 或 abstract 方法。这意味着子类重写的是基类中的方法,而不是父类(即子类的基类)中已经重写的方法。
virtual
abstract
override
考虑以下示例:
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 继承自 BaseClass。BaseClass 中的 VirtualMethod 方法被标记为 virtual,ParentClass 中重写了这个方法,而 ChildClass 又重写了 ParentClass 中的方法。
ChildClass
ParentClass
BaseClass
VirtualMethod
当您创建 ChildClass 的实例并调用 VirtualMethod 方法时,将会调用 ChildClass 中的重写实现。因此,输出将是:
ChildClass Override VirtualMethod
这表明,子类重写的是基类中的方法,而不是父类中已经重写的方法。