命名空間和類型具有“成員”。通常可以通過限定名來訪問實體的成員。限定名以對實體的引用開頭,後跟一個“.
”標記,再接成員的名稱。
類型的成員或者是在該類型中聲明的,或者是從該類型的基類“繼承”的。當類型從基類繼承時,基類的所有成員(執行個體建構函式、解構函式和靜態建構函式除外)都成為衍生類別型的成員。基類中關於成員的可訪問性的聲明不能控制該成員是否可繼承:繼承性適用於任何成員,只要它們不是執行個體建構函式、靜態建構函式或解構函式。然而,在衍生類別中可能不能訪問已被繼承的成員,原因或者是因為其已聲明可訪問性,或者是因為它已被類型本身中的聲明所隱藏。
衍生類別繼承基類的所有成員(除建構函式和解構函式),new用來隱藏基類成員,override用來重寫基類成員方法。然而隱藏和重寫都不能改變一個事實:
基類的所有成員(執行個體建構函式、解構函式和靜態建構函式除外)在衍生類別中一個也不能少。
例如:
Fruit |
Private string name |
Protected string color |
Internal int amount |
Public int price |
Private void Fn01() (虛擬成員或抽象成員不能是私人的,所以不能用virtual關鍵字) |
Protected (virtual) void Fn02() |
Internal (virtual) void Fn03() |
Public (virtual) void Fn04() |
================================
Apple : Fruit |
Private string name |
衍生類別中不可見,可以聲明一個同名欄位(不用new關鍵字),兩個欄位各不相干。 |
Protected string color |
衍生類別中可見,聲明一個同名欄位將隱藏它(最好用new)。如果不聲明同名欄位,那麼this.color和base.color指的是同一個值。 |
Internal int amount |
衍生類別中可見,聲明一個同名欄位將隱藏它(最好用new)。如果不聲明同名欄位,那麼this.amount和base.amount指的是同一個值。 |
Public int price |
衍生類別中可見,聲明一個同名欄位將隱藏它(最好用new)。如果不聲明同名欄位,那麼this.price和base.price指的是同一個值。 |
Private void Fn01() 虛擬成員或抽象成員不能是私 有的,所以不能用virtual關鍵字 |
衍生類別中不可見,可以聲明一個同名方法(不用new關鍵字),兩個方法各不相干。 |
Protected (virtual) void Fn02() |
衍生類別中可見,new一個同名方法將隱藏它,override將重寫它 |
Internal (virtual) void Fn03() |
衍生類別中可見,new一個同名方法將隱藏它,override將重寫它 |
Public (virtual) void Fn04() |
衍生類別中可見,new一個同名方法將隱藏它,override將重寫它 |