这样拥有代码:为什么VS会自动添加对基类虚拟方法的调用?
class X
{
public virtual void Test()
{
}
}
class Y : X
{
public override void Test()
{
base.Test() //added automatically, why?
}
}
这样拥有代码:为什么VS会自动添加对基类虚拟方法的调用?
class X
{
public virtual void Test()
{
}
}
class Y : X
{
public override void Test()
{
base.Test() //added automatically, why?
}
}
因为,通过暗示,不会打破任何东西。
因为在大多数情况下,它有意义或者甚至需要调用基类实现,例如,在WinForms中(基类通常从其OnXXX
方法中引发事件)虚方法(基类需要处置)或虚方法OnXXX
。
当然如果虚拟方法是你的,你不希望这种行为我认为,这是很烦人;)
讨厌与否,即使你自己的基础方法可能会改变 - 有一些潜在的_sood stuffs_去。 – 2011-04-08 10:13:22
当然,但也可能有些情况下,它不打算使用基类的功能。以'Object.ToString'为例,你通常不需要基础实现。 – 2011-04-08 10:30:02
确切地说;这就是我发现在预期行为中掷出50/50的“恼人”有点苛刻的原因。 – 2011-04-08 10:43:36
是的,但它是烦人。 – Mirial 2011-04-08 09:42:43
如果什么都没有打破,为什么会很烦人呢? – thumbmunkeys 2011-04-08 09:43:23
实际上,大部分时间你都需要扩展一个方法的功能,并且最终会在重写的方法中调用'base.Method()'。 – 2011-04-08 09:44:08