描述建構函式如何在繼承中使用,關於C 中建構函式的繼承的問題。

2021-07-29 11:15:22 字數 3391 閱讀 3038

1樓:手機使用者

繼承技術是物件導向程式設計的主要特徵。物件導向程式語言引入繼承機制,可以實現**重用,提高程式設計效率。c#只支援單繼承,即一個派生類只能有一個基類。

類的繼承性是指一個類定義既可以具有其他類的資料成員、屬性成員、方法成員等,也可以使其他類具有自己的資料成員、屬性成員、方法成員等。在類的繼承中,被繼承的類叫基類或父類,繼承的類叫派生類或子類。

派生類通常定義的語法格式為:

public class 派生類名稱 : 基類名稱

public:訪問控制修飾符,訪問控制修飾符可以是public、protected和private。通常都使用public以保證類的開放性,並且public可以省略,因為類定義的訪問控制預設為是pulbic。

“:基類名稱”:表示所繼承的類。

在類的繼承中,作為基類的資料成員通常使用protected修飾符,而不使用private修飾符。因為如果在基類中使用private修飾符宣告資料成員,則其成員將不允許派生類成員訪問,而protected修飾符,既能保證資料成員不被直接訪問,又允許其派生類成員訪問。

在建立派生類物件時,呼叫建構函式的順序是先呼叫基類建構函式,再呼叫派生類的建構函式,以完成為資料成員分配記憶體空間並進行初始化的工作。

如果派生類的基類本身是另一個類的派生類,則建構函式的呼叫次序按由高到低順序依次呼叫。例如,假設a類是b類的基類,b類是c類的基類,則建立c類物件時,呼叫建構函式的順序為,先呼叫a類的建構函式,再呼叫b類的建構函式,最後呼叫c類的建構函式。

向基類建構函式傳遞引數,必須通過派生類的建構函式實現,其格式如下:

public 派生類建構函式名(形參列表):base(向基類建構函式傳遞的實參列表)

“base”是c#關鍵字,表示呼叫基類的有參建構函式。

傳遞給基類建構函式的“實參列表”通常包含在派生類建構函式的“形參列表”中。

密封類是不允許其他類繼承的類。密封方法是不允許派生類過載的方法

定義密封類與密封方法需要使用sealed關鍵字,定義密封類的格式為:

訪問修飾符 sealed class 類名稱

定義密封方法的格式為:

訪問修飾符 sealed 返回型別 方法名稱(引數列表)

多型性就是指在程式執行時,執行的雖然是一個呼叫方法的語句,卻可以根據派生類物件的型別不同完成方法的不同的具體實現。

在類的繼承中,c#允許在基類與派生類中宣告具有同名的方法,而且同名的方法可以有不同的**,也就是說在基類與派生類的相同功能中可以有不同的具體實現,從而為解決同一問題提供多種途徑。

要實現繼承的多型性,在類定義方面,必須分別用virtual關鍵字與override關鍵字在基類與派生類中宣告同名的方法,在具體實現上通常是通過傳遞物件的途徑,並且通常基類有兩個以上的派生類,或者基類的派生類其下又有派生類。

基類中的宣告格式:

public virtual 返回型別 方法名稱(引數列表)

派生類中的宣告格式:

public override 返回型別 方法名稱(引數列表)

其中,基類與派生類中的方法名稱與引數列表必須完全一致。

在派生類中宣告與基類同名的方法,也叫方法過載。在派生類過載基類方法後,如果想呼叫基類的同名方法,可以使用base關鍵字。在派生類定義中呼叫基類方法的格式為:

base 基類方法名稱(引數列表);

抽象類是指基類的定義中宣告不包含任何實現**的方法,實際上就是一個不具有任何具體功能的方法。這樣的方法唯一的作用就是讓派生類重寫。在基類定義中,只要類體中包含一個抽象方法,該類即為抽象類。

在抽象類中也可以宣告一般的虛方法。宣告抽象類與抽象方法均需使用關鍵字abstract,抽象方法不是一般的空方法,抽象方法宣告時,沒有方法體。

抽象方法與虛方法的作用相同,兩者均是實現多型的基礎,因而兩者均允許派生類過載。只不過對於基類中的抽象方法,在其派生類中要求必須重寫,而虛方法則不要求一定重寫。抽象方法一般應用於基類中的該方法不應有具體實現功能,而虛方法則應用於基類中的該方法應該有具體的實現功能。

在c#中,array類是一個抽象類,該類提供建立、操作、搜尋和排序陣列的方法,因而在公共語言執行庫中用作所有陣列的基類。

在c#中,math類是一個密封類,該類為三角函式、對數函式和其他通用數學函式提供常數和靜態方法。convert類也是一個密封類,該類將一個基本資料型別轉換為另一個基本資料型別。

2樓:匿名使用者

ghcgjuugui

3樓:

類物件在初始化時,會先呼叫父類的建構函式,然後呼叫自己的建構函式;類物件在析構時,先呼叫自己的解構函式,再呼叫父類的解構函式。

4樓:匿名使用者

和樓主一樣的問題求解。

mystring 如何使用基類的建構函式string ( const char * s );

關於c#中建構函式的繼承的問題。

5樓:

1、建構函式不繼承,派生類會自動呼叫基類建構函式。

2、若類內沒有定義建構函式,系統會自動隱式生成一個不帶引數的建構函式,比如定義一個類:

public class a

可以理解為它已經存在一個如下的建構函式

public class a

}3、派生類建構函式自動呼叫基類的不帶引數的建構函式,注意下面的格式public class b:a

}相當於

public class b:a

}3、基類中帶引數的建構函式必須顯式呼叫,比如:

public class a

public a(string str)

}public class b:a}

6樓:匿名使用者

建構函式是不能被繼承的。。。。

base的作用,

public class a

public a(string str)

}public class b:a

public b(string stra,string strb):base(stra)

}//用下面兩句跟下程式就知道了。。。。

b objb0=new b("class b");

b objb1=new b("class a","class b");

7樓:匿名使用者

建構函式不繼承。

base是在當前類中如果想呼叫父類函式或屬性時使用。

8樓:

base 關鍵字用於從派生類中訪問基類的成員:

呼叫基類上已被其他方法重寫的方法。

指定建立派生類例項時應呼叫的基類建構函式。

基類訪問只能在建構函式、例項方法或例項屬性訪問器中進行。

從靜態方法中使用 base 關鍵字是錯誤的。

9樓:專注於社會學

base.函式

呼叫基類

c 中,public繼承,如何在子類中使用private成員,不是說private不能被訪問嗎

c 中成員bai變數有三個限定級別 duprivate,protected,public。zhiprivate只能是在自身類中能呼叫dao,例如 回sub是一個繼承父類father的子類,答sub類中定義的函式是不能直接訪問father類中的私有成員的。如果想要訪問,就要把父類中的成員用protec...

如何在jsp頁面中使用freemarker標籤和struts2標籤

struts cleanup org.apache.struts2.dispatcher.actioncontextcleanup sitemesh freemarker org.apache.struts2.sitemesh.freemarkerpagefilter default encodin...

如何在中使用電子簽名

教你在word中製作電子簽名 1 首先,我們手動在一張白紙上寫下我們的簽名,用手機拍下我們的簽名,然後傳送到電腦上。2 接下來,我們開啟計算機上的word軟體,並輸入需要新增到簽名服務中的word文件。3 輸入文件後,我們在軟體選單欄中找到了 插入 選單,並繼續在 插入 選單下找到 插圖 選項卡。4...