C 學習筆記整理 深入剖析建構函式 析構函式

2022-09-26 05:21:09 字數 2105 閱讀 8136

建構函式、析構函式

建構函式:

1.若沒提供任何建構函式,則系統會自動提供乙個預設的建構函式,初始化所有成員為預設值(引用型別為空引用null,值型別為0,bool型別為false);

2.若提供了帶引數的建構函式,則系統不提供預設的建構函式;

3.建構函式可過載:可提供多個不同版本的建構函式,依據引數的個數、型別來區分;

4.私有構造程式設計客棧函式:則無法通過該建構函式例項化該物件,可通過呼叫靜態函式來例項化;當僅用作某些靜態成員或屬性的容器時,可定義私有建構函式來防止被例項化;

一般的建構函式都是例項建構函式,只要建立例項,就執行建構函式;

靜態建構函式:

1.只能定義乙個,最多執行一次,僅在第一次呼叫類的任何成員之前由.net執行庫呼叫它,

2.它不能帶任何引數、無任何訪問修飾符,只能訪問類的靜態成員,無法訪問到類的例項成員;

3.如果類有一些靜態字段、屬性需要在第一次使用類之前從外部源中初始化,則使用靜態建構函式;

4.靜態建構函式與無引數的例項建構函式可以同時定義,何時執行哪個建構函式不會衝突;

在建構函式中可以呼叫自身的其它建構函式:this(),或父類的建構函式:base(),可類似繼承的語法呼叫其它建構函式;

唯讀欄位readonly:和常量const類似,不能修改其值,但唯讀欄位用readonly宣告,可以未初始化,在建構函式中對其初始化,之後不可更改其值;

匿名型別的例項化:var a = new;

建構函式:用於析構類的例項

• 不能在結構中定義析構函式。只能對類使用析構函式。

• 乙個類只能有乙個析構函式。

• 無法繼承或過載析構函式。

• 無法呼叫析構函式。它們是被自動呼叫的。由垃圾**器控制,如果垃圾**器認為某個物件符合析構,則呼叫析構函式(如果有)並**用來儲存此物件的記憶體。程式退出時也會呼叫析構函式

• 析構函式既沒有修飾符,也沒有引數

可以通過呼叫 collect 強制進行垃圾**,但大多數情況下應避免這樣做,因為這樣會導致效能問題

c# 無需太多的記憶體管理。這是因為 .net framework 垃圾**器會隱式地管理物件的記憶體分配和釋放。但是,當應用程式封裝視窗、檔案和網路連線這類非託管資源時,應當使用析構函式釋放這些資源。當物件符合析構時程式設計客棧,垃圾**器將執行物件的 finalize 方法。

如果您的應用程式在使用昂貴的外部資源,我們還建議您提供一種在垃圾**器釋放物件前顯式地釋放資源的方式。可通過實現來自 idisposable 介面的 dispose 方法來完成這一點,該方法為物件執行必要的清理。這樣可大大提高應用程式的效能。即使有這種對資源的顯式控制,析構函式也是一種保護措施,可用來在對 dispose 方法的呼叫失敗時清理資程式設計客棧源

class car

}該析構函式隱式地對繼承鏈中的所有例項遞迴地呼叫呼叫 finalize()方法

public class bus

static bus() //靜態建構函式

", globalstarttime.tolongtimestring());

}public bus(int routenum)

is created.", routenumber);

}public void drive()

is starting its route minutes after global start time .",

this.routenumber,

elapsedtime.totalmilliseconds,

globalstarttime.toshorttimestring());

} }

class t程式設計客棧estbus }

/* output:

static ctor sets global start time to 10:04:08 am

71 is created.

71 is starting its route 21.00 minutes after global start time 10:04 am.

72 is created.

72 is starting its route 46.00 minutes after global start time 10:04 am.

*/本文位址:

深入C 建構函式

通常很多c 程式設計師存在兩種誤解 在讀 深度探索c 物件模型 之前,我一直停留在上述二種誤解上,所幸的是lippman為我破除了藩籬。下面的部分我將隨 深度探索c 物件模型 對c 預設建構函式一 竟。c 標準規定 如果類的設計者並未為類定義任何建構函式,那麼會有乙個預設建構函式被暗中生成,而這個暗...

深入C 建構函式

通常很多c 程式設計師存在兩種誤解 在讀 深度探索c 物件模型 之前,我一直停留在上述二種誤解上,所幸的是 lippman為我破除了藩籬。下面的部分我將隨 深度探索c 物件模型 對c 默 認建構函式一 竟。c 標準規定 如果類的設計者並未為類定義任何建構函式,那麼會有乙個預設 建構函式被暗中生成,而...

C 剖析 轉換建構函式

參考自 狄泰 c 深度解析 我們知道在標準的資料型別之間是有隱式轉換的,轉換關係如下 這是 c語言和 c 裡的轉換關係,我們這裡主要談論c 總所周知c 相比c語言有了乙個類的概念,類中有建構函式,而當建構函式具有以下特點時會成為轉換建構函式 有且只有乙個引數 引數是基本資料型別 引數不是自身類的型別...