2016年3月21日 星期一

小山的 C# 教學-第32課-Override vs Method Hiding

本課簡介

有時候使用 override 的時候常會忘記要加上關鍵字
如果沒有加的話程式仍可以正常執行
但是跑出來的結果卻不太一樣?
這是為什麼呢?

教學影片

注意:影片有高畫質 720P 的選項,可以看得更清楚喔!



重點提示

1. 當繼承的類別之中有著與基底類別 (父類別) 名稱和參數相同的 method,但沒有加上 override 的字樣,就會觸發 method hiding (方法遮蔽) 的機制。

2. Method hiding (方法遮蔽) 指的是繼承的類別將原本基底類別的 method 隱藏起來了,但是與 override 不同,新的 method 會與舊的 method 共存,而且都可以被呼叫得到。

3. 如果想要呼叫到被隱藏起來的 method,就必須要用該 method 所屬的 class 變數來呼叫。舉例來說 class B 裡面的 say() 遮蔽了 class A 的 say(),如果想要呼叫到 class B 物件之中原本 A 版本的 say() 的話,就要用 A 型別的變數去存取 B 的物件。就像下面這段程式碼:

A a = new B(); // B 的物件,但用 A 的變數存取 a.say();
4. 為了防止跟 override 混淆,想要使用方法遮蔽時可以在 method 前面加上「new」來加以區分。

相關資訊連結

MSDN - 3.7.1.2 透過繼承隱藏

https://msdn.microsoft.com/zh-tw/library/aa691135%28v=vs.71%29.aspx

4 則留言: