研究了一下C#中子類重寫父類方法的幾種情況,關(guān)鍵字:virtual、abstract、override、new。
virtual:標(biāo)識可能但不是必須被子類重寫的方法,父類必須給出默認(rèn)實現(xiàn),子類可以重寫(使用override,new,或無特殊標(biāo)識的普通方法),也可以不重寫該方法。
abstract:標(biāo)識必須被子類重寫的方法,父類不給出實現(xiàn),子類必須用override關(guān)鍵字重寫該方法。
override:標(biāo)識重寫父類的方法,父類方法必須是用abstract,virtual,override之一聲明,運行時將根據(jù)實例的類型而不是引用的類型調(diào)用對象的方法。
new:標(biāo)識重寫父類的方法,父類方法可以用virtual、override、new之一聲明,也可以是沒有特殊標(biāo)識的普通方法,運行時會根據(jù)引用的類型選擇調(diào)用父類還是子類的方法,重寫父類方法時,使用new關(guān)鍵字與使用沒有特殊標(biāo)識的普通方法是等效的,但是后者會給出一個編譯警告。
下面的表格總結(jié)了子類重寫父類方法的各種情況(Class B繼承自Class A,重寫了A的Test()方法):