這樣擁有代碼:爲什麼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