一、繼承
c#中,派生類只能從乙個類中繼承。
c#中的繼承符合下列規則:
(1)繼承是可傳遞的。
(2)派生類應當是對基類的擴充套件。派生類可以新增新的成員,但不能除去己經繼承的成員的定義
(3)建構函式和析構函式不能被繼承。除此以外的其它成員,不論對它們定義了怎樣的訪問方式,都能被繼承。基類中成員的訪問方式只能決定派生類能否訪問它們。
(4)派生類如果定義了與繼承而來的成員同名的新成員,就可以覆蓋(hide)己繼承的成員。這種情況下,編譯器不會報告錯誤,但會給出乙個警告。對派生類的成員使用new關鍵字,可以關閉這個警告。但這並不因為這派生類刪除了這些成員,只是不能再訪問這些成員。
(5)類可以定義虛方法、虛屬性以及虛索引指示器,它的派生類能夠過載這些成員,從而實現類可以展示出多型性。
二、多型
在c#中多型性的定義是:同一操作作用於不同的類的例項,不同的類將進行不同的解釋,最後產生不同的執行結果。c#支援兩種型別的多型性:
(1)編譯時的多型性
編譯時的多型性是通過過載來實現的。
(2)執行時的多型性
執行時的多型性就是指直到系統執行時,才根據實際情況決定實現何種操作。c#中,執行時的多型性通過虛成員實現。
當類中的方法宣告前加上了virtual修飾符,我們稱之為虛方法,反之為非虛。虛函式有執行體(後面談到的抽象函式沒有執行體)。
在派生類中宣告對虛方法的過載,要求在宣告中加上override關鍵字,而且不能有new, static或virtual修飾符。new關鍵字是對基類同名函式進行覆蓋。而一般的函式過載(編譯時的多型性)只是方法名稱相同,但返回值型別、參數列中的引數個數、型別、順序可能不同。
三、抽象和密封
1.抽象類
抽象類使用abstract修飾符,對抽象類的使用有以下幾點規定:
(1)抽象類只能作為其它類的基類,它不能直接被例項化,而且對抽象類不能使用new操作符。抽象類如果含有抽象的變數或值,則它們要麼是null型別,要麼包含了對非抽象類的例項的引用。
(2)抽象類允許包含抽象成員,雖然這不是必須的。
(3)抽象類不能同時又是密封的。
2.抽象方法
乙個方法宣告中如果加上abstract修飾符,我們稱該方法為抽象方法(abstract method )。如果乙個方法被宣告也是抽象的,那麼該方法預設也是乙個虛方法。事實上,抽象方法是乙個新的虛方法,它不提供具體的方法實現**。非虛的派生類要求通過過載為繼承的虛方法提供自己的實現,而抽象方法則不包含具體的實現內容,所以方法宣告的執行體中只有乙個分號「;」。只能在抽象類中宣告抽象方法。
abstract class a
3、密封類
有時候,我們並不希望自己編寫的類被繼承。另一些時候,有的類己經沒有再被繼承的必要。c#提出了乙個密封類(sealed class)的概念,幫助開發人員來解決這一問題。
密封類在宣告中使用sealed修飾符,這樣就可以防止該類被其它類繼承。如果試圖將乙個密封類作為其它類的基類,c#將提不出錯。理所當然,密封類不能同時又是抽象類,因為抽象總是希望被繼承的。
4、密封方法
我們己經知道,使用密封類可以防止對類的繼承。c#還提出了密封方法(sealed method)的概念,以防止在方法所在類的派生類中對該方法的過載。
不是類的每個成員方法都可以作為密封方法,密封方法必須對基類的虛方法進行過載,提供具體的實現方法。所以,在方法的宣告中,sealed修飾符總是和override修飾符同時使用。
class a
public virtual void g()
}class b: a
}
c 物件導向程式設計 物件導向
什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...
C 的物件導向程式設計一
c 的物件導向程式設計一 類的學習筆記 c 不同於c的乙個重要特性便是它具有物件導向的程式設計思想。那麼談到了物件導向,那從基礎上就得先談資料的封裝了,也就是我們常說的類了。細節的學習應該可以從書上來學。參考書籍 c primer 第4版 這個學習筆記我想記錄一些關於在設計乙個類時所需要知道的事情。...
C 物件導向程式設計
1.1 類與物件 物件 object 是類 class 的乙個例項 instance 如果將物件比作房子,那麼類就是房子的設計圖紙。所以物件導向程式設計的重點是類的設計,而不是物件的設計。類可以將資料和函式封裝在一起,其中函式表示了類的行為 或稱服務 類提供關鍵字public protected 和...