有一件事我不太了解:调用虚方法时,也调用基本方法?
因为当我使用公共覆盖WinForm OnPaint方法时,在其body base.OnPaint(e)中被调用。我不明白,我认为虚拟方法会覆盖原始方法。 如果它通常不被调用,为什么在这种情况下调用它?谢谢
答案 0 :(得分:11)
不,如果您没有从派生类中明确调用它,则不会调用它。
答案 1 :(得分:5)
当调用虚方法时, 还调用了基本方法?
没有
因为当我使用公共覆盖时 OnPaint(),在它的身体基础上.OnPaint(e) 叫做。我不明白,我 以为虚拟方法会覆盖 原来的。
开发人员选择调用base.OnPaint(e)并执行其他操作。换句话说,基础实现是你掌握的东西,以防它对你有用 - 你可以调用它,然后做一些额外的特定工作。
如果函数体只是 对基数的调用,那么它将等同于根本不写入覆盖函数。
答案 2 :(得分:1)
据我所知,当你说“调用虚方法”时,你的意思是重写方法。
答案是否定的。每当调用任何版本的虚方法时,它都不会自动调用其基类方法。但有时你想调用它们,所以你要包含对基类方法的显式调用。像这样:
class Base
{
public virtual void VirtualMethod()
{
// Insert code here
}
}
class Derived : Base
{
public override void VirtualMethod()
{
// Insert code here
base.VirtualMethod(); // Explicit call to the base class method
}
}
如果我们没有包含指令base.VirtualMethod();
,则在调用派生类方法时不会调用基类方法。
答案 3 :(得分:0)
当调用虚方法时, 还调用了基本方法?
这取决于您是否在重写方法中调用base.XXX
。
答案 4 :(得分:0)
有时你在“base”方法中有代码,无论正在执行哪个子方法都很有用,那么孩子们只能调用基本方法,但这是可选的。
除非你专门调用基本方法,否则调用子方法而不是“基础”,而不是“以及”。