C# 自分用入門筆記01 : 類別與繼承 關鍵字簡介 static abstract virtual override new interface


引言

物件導向編程的語言例如 : C#、Java等都會有不少修飾元( Modifier )關鍵字,但對初學者而言可能有點太過複雜,本文在於用簡單方式介紹幾個修飾元。

1. static

    此修飾元用在類別和函式上,static類別是指不用被實例化(Instancing)成物件的情況下也能使用的類別,能夠從代碼中任何一個角落被調用,可以直接想像成一個直接被實例化在Global Scope的類別。

2. abstract

    修飾元用在類別上,abstract類別是所有類別繼承關係中最底層的一環,也就是用來「被繼承」的類別。abstract類別不能被實體化,也不能被直接調用。唯有的用途就是作為一個Template給其他類別繼承。

3. virtual 

    修飾元用在函式上,virtual函式會被定義在abstract類別中,也同樣不能被直接調用,用途在於給繼承此類別的子類別覆蓋用的。

4. override

    修飾元用在函式上,override函式被用在子類別中,用來覆蓋被繼承的abstract類別中的virtual函式。覆蓋後,繼承同一類別的各個子類別便可以有相同的名字但內容不同的函式。

5. new 

    此修飾元用在函式上,用途與override相同,覆蓋與底類別同名的函式,new與override十分類似,使用上new的自由度更高,能夠和底類別同名的函式有不同的參數,也能用在覆蓋非virtual函式。但new函式並不是真的覆蓋底類別的函式,函式被以底類別引用時,結果被調用的還會是底類別的函式。
    因此,new用起來需要更小心一點,不然會使代碼變得過於複雜。

6. interface

    此修飾元用在類別上,用途與上述的所有修飾元都不同。interface類別和abstract相同,都是用來「被繼承」的,無法直接被實例化,但interface與abstract類別的差異在於abstract是子類別的模板,abstract有的特性、屬性、方法等內容,其子類別都會有,而interface被繼承時,會被以類似於組件的概念被併接在子類別上,繼承interface的子類別被以interface引用時可以使用interface的特性,而且一個類別的定義中可以繼承多個interface。

    如果以形象化的比喻,abstract類別類似於元祖高達的核心戰機,子類別會內嵌整個abstract類別。而interface則類似於突擊高達的劍/炮/飛翼裝備,子類別即使沒了interface也可以使用,而且可以同時繼承多於一個interface。而脈衝高達就是同時繼承了abstract以及interface的子類別。


Published by