2016年7月20日 星期三

override, new, virtual in C# x 指鹿為馬怎麼辦

當衍生/繼承Class有與基礎Class有相同簽名(signature)的成員,就會牽涉到override/new來決定指鹿為馬的時候的行為

範例 程式(C#6.0), 專案執行檔

override/複寫/: 以B型態呼叫D物件,會呼叫到D物件中的成員
*在D物件中宣告成員為override須將對應的B物件成員設為virtual
*virtual是一種警告,警告呼叫此成員的行為會依物件的型態(而不是呼叫型態而定)

new/隱藏/: 以B型態呼叫D物件,會呼叫到B物件中的成員


    叫


鹿:馬   //鹿是一種馬
    叫

有一隻鹿,我們可以當他是馬叫她小馬,或當他是鹿,叫他斑比
鹿 斑比 = 一隻鹿;
馬 小馬 = 斑比;

如果鹿叫是用override
不論你叫她小馬或叫他斑比他都是叫得像鹿

但若今天鹿叫是用new
你叫她小馬,他就會像馬一樣叫
你叫他斑比,他就會像鹿一樣叫

這項規則不只適用於外部呼叫,內部呼叫也是一樣
如果在"叫"裡面需要呼叫"吸氣",當呼叫小馬"叫",而叫是new(會呼叫馬的"叫")時,叫中的"吸氣"有virtual的時候一樣會去搜尋"鹿"有沒有override"吸氣"成員




沒有留言:

張貼留言