深入剖析C 繼承機制 2

2021-06-15 22:17:42 字數 1205 閱讀 2009

二、c#中的繼承符合下列規則:

1、繼承是可傳遞的。如果c從b中派生,b又從a中派生,那麼c不僅繼承了b中宣告的成員,同樣也繼承了a中的成員。object 類作為所有類的基類。

2、派生類應當是對基類的擴充套件。派生類可以新增新的成員,但不能除去已經繼承的成員的定義。

3、建構函式和析構函式不能被繼承。除此以外的其它成員,不論對它們定義了怎樣的訪問方式,都能被繼承。基類中成員的訪問方式只能決定派生類能否訪問它們。

4、派生類如果定義了與繼承而來的成員同名的新成員,就可以覆蓋已繼承的成員。但這並不因為這派生類刪除了這些成員,只是不能再訪問這些成員。

5、類可以定義虛方法、虛屬性以及虛索引指示器,它的派生類能夠過載這些成員,從而實現類可以展示出多型性。

6、派生類只能從乙個類中繼承,可以通過接呂實現多重繼承。

下面的**是乙個子類繼承父類的例子:

using system ;

public class parentclass

public void print( )

}public class childclass : parentclass

public static void main( ) }

程式執行輸出:

父類建構函式。子類建構函式。i'm a parent class。

上面的乙個類名為parentclass, main函式中用到的類名為childclass。要做的是建立乙個使用父類parentclass現有**的子類childclass。

1.首先必須說明parentclass是childclass的基類。

這是通過在childclass類中作出如下說明來完成的:"public class childclass : parentclass"。在派生類識別符號後面,用分號":" 來表明後面的識別符號是基類。c#僅支援單一繼承。因此,你只能指定乙個基類。

2.childclass的功能幾乎等同於parentclass。

因此,也可以說childclass "就是" parentclass。在childclass 的main( )方法中,呼叫print( ) 方法的結果,就驗證這一點。該子類並沒有自己的print( )方法,它使用了parentclass中的 print( )方法。在輸出結果中的第三行可以得到驗證。

3.基類在派生類初始化之前自動進行初始化。parentclass 類的建構函式在childclass的建構函式之前執行。

深入剖析C 繼承機制2

二 c 中的繼承符合下列規則 1 繼承是可傳遞的。如果c從b中派生,b又從a中派生,那麼c不僅繼承了b中宣告的成員,同樣也繼承了a中的成員。object 類作為所有類的基類。2 派生類應當是對基類的擴充套件。派生類可以新增新的成員,但不能除去已經繼承的成員的定義。3 建構函式和析構函式不能被繼承。除...

深入剖析C 繼承機制4

2 隱藏基類成員 想想看,如果所有的類都可以被繼承,繼承的濫用會帶來什麼後果?類的層次結構體系將變得十分龐,大類之間的關係雜亂無章,對類的理解和使用都會變得十分困難。有時候,我們並不希望自己編寫的類被繼承。另一些時候,有的類已經沒有再被繼承的必要。c 提出了乙個密封類 sealed class 的概...

深入剖析C 繼承機制3

三.訪問與隱藏基類成員 1 訪問基類成員 通過base 關鍵字訪問基類的成員 呼叫基類上已被其他方法重寫的方法。指定建立派生類例項時應呼叫的基類建構函式。基類訪問只能在建構函式 例項方法或例項屬性訪問器中進行。從靜態方法中使用 base 關鍵字是錯誤的。示例 下面程式中基類 person 和派生類 ...