相对而言,我有一个基类 A 和它的后继类 B。A 类有一个虚方法,它在后继类中被覆盖。问题:我可以调用尚未在子对象(虚拟对象)上覆盖的基类方法吗?如果可以,如何调用?
class A
{
public virtual void myMethod() {}
}
class B : A
{
public override void myMethod() {}
}
Нужно что бы в вызывающей части программы было что то вроде этого:
B b = new B();
b.myMethod(); // но метод базового класса
通常,C# 有一个关键字
base. 有了它,你可以在后代类中访问祖先类的成员。例如像这样:如果你写这样的东西:
然后输出到控制台
如果只想执行基类方法的逻辑,那么方法应该是这样的:
但是这真的没有任何意义,因为如果子方法只调用祖先方法,那么这个方法根本不需要声明
这当然行不通:
因为 这是对类方法的显式调用
B。如果您需要覆盖该方法并能够调用旧实现,那么您可以为其选择一个新的旧方法:
另一件事是,如果您需要摆脱多态性:
在这种情况下,有必要拒绝虚拟
myMethod,因为 它的全部意义在于调用被覆盖的方法。用这种方法,
B.myMethod隐藏A.myMethod。请记住,在阅读代码时,具有相同名称的完全不相关的方法会使开发人员感到困惑。因此,在这种情况下,给方法赋予不同的名称是有意义的。