1、屏蔽基類的成員
全部類都派生自object類。
雖然類只能直接繼承一個基類,但繼承的層次沒有限制。
雖然派生類不能刪除它繼承的任何成員,但能夠用與基類同名的成員來屏蔽(mask)基類成員。
1. 要屏蔽一個繼承的數據成員,須要聲明一個新的同類型成員,並使用相同名稱。
2. 經過在派生類中聲明新的帶有相同簽名的函數成員,能夠隱藏或屏蔽繼承的函數成員。
3. 要讓編譯器知道你在故意屏蔽繼承的成員,使用new修飾符。不然,程序能夠成功編譯,但編譯器會警告你隱藏了一個繼承的成員。
4. 也可屏蔽靜態成員。
示例:ide
若是派生類必須徹底的訪問被隱藏的繼承成員,可使用基類訪問(base access):
base.成員名稱函數
2、使用基類的引用
若是有一個派生類對象的引用,就能夠獲取該對象基類部分的引用。經過基類部分的引用只能訪問到基類的成員,而不能訪問到派生類的成員。
示例:this
圖示:spa
若是但願經過基類的引用能訪問到派生類的成員,該怎麼作呢?
使用虛方法和覆寫方法!設計
1. 使用虛方法和覆寫方法的條件:
(1)派生類的方法和基類的方法有相同的簽名和返回類型。
(2)基類的方法使用virtual標註。
(3)派生類的方法使用override標註。
示例:3d
2. 使用虛方法和覆寫方法的限制:
(1)覆寫和被覆寫的方法必須有相同的可訪問性。換句話說,當被覆寫爲private時,覆寫方法不能是public等。
(2)不能覆寫static方法和非虛方法。
(3)方法、屬性和索引器,以及另外一種成員類型事件,均可以被聲明爲virtual和override。
3. 覆寫方法能夠在繼承的任何層次出現。
(1)當使用對象基類部分的引用調用一個覆寫的方法時,方法的調用被沿派生層次上溯執行,一直到標記爲override的方法的最高派生(most-derived)版本。
(2)若是在更高的派生級別有該方法的其餘聲明,但沒有被標記爲override,那麼它們不會被調用。對象
3、構造函數的執行
1. 建立一個實例過程當中的第一件事是初始化對象的全部實例成員。而後調用基類的構造函數,最後執行該類本身的構造函數。繼承層次鏈中的每一個類在執行它本身的構造函數體以前執行它的基類構造函數。
圖示:blog
2. 當基類有多個構造函數時,使用關鍵字base並指明使用哪個基類構造函數。
當派生類有多個構造函數時,使用關鍵字this並指明應該使用當前類的哪個構造函數。
示例:繼承
4、成員訪問修飾符
1. 類的可訪問性只有兩種修飾符:
internal
public
2. 成員的可訪問性有5個訪問級別:
public
private
protected
internal
protected internal
3. 全部顯式聲明在類聲明中的成員都是相互可見的,不管它們的訪問性如何。
必須對每一個成員指定訪問級別。若是不指定,它默認的隱式訪問級別爲private。
成員不能比它的類有更高的可訪問性。
圖示:索引
5、抽象類
1. 抽象成員
抽象成員指設計爲被覆寫的函數成員。抽象成員有如下特徵:
(1)必須是一個函數成員,即字段和常量不能是抽象成員。
(2)必須用abstract修飾。
(3)不能有實現代碼塊。代碼用分號表示。
(4)共有4個類型的成員能夠聲明爲抽象:方法、屬性、事件、索引。
(5)儘管抽象成員必須在派生類中被覆寫,但不能把virtual和abstract合用。
(6)相似虛成員,派生類中抽象成員的實現必須指定override修飾符。
2. 抽象類
抽象類指設計爲被繼承的類。抽象類只能被用做其餘類的基類。
(1)不能建立抽象類的實例。
(2)抽象類使用abstract標識。
(3)抽象類能夠包含抽象成員和普通的非抽象成員。
(4)抽象類能夠派生自另外一個抽象類。
(5)任何派生自抽象類的類必須使用override關鍵字實現該類全部的抽象成員,除非派生類本身也是抽象類。
示例:
6、密封類
抽象類必須用做基類,它不能被實例化。
密封類與抽象類相反。
密封類只能被用做獨立的類,不能用做基類(被繼承)。
密封類使用sealed修飾符標註。
7、靜態類
靜態類中全部成員都是靜態的。
靜態類用於存放不受實例數據影響的數據和函數。
靜態類常見用途就是建立一個包含一組數學方法和值的數學庫。
(1)靜態類自己必須標記爲static。
(2)類的全部成員必須是靜態的。
(3)類能夠用一個靜態構造函數,但不能有實例構造函數,不能建立該類的實例。
(4)靜態類是隱式密封的,即不能繼承靜態類。
8、擴展方法
擴展方法容許編寫的方法和聲明它的類以外的類關聯。
擴展方法的重要要求以下:
(1)聲明擴展方法的類必須聲明爲static。
(2)擴展方法自己必須聲明爲static。
(3)擴展方法必須包含關鍵字this做爲它的第一個參數類型,並在後面跟着它所擴展的類的名稱。
示例: