建構函式、析構函式
建構函式:
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語言有了乙個類的概念,類中有建構函式,而當建構函式具有以下特點時會成為轉換建構函式 有且只有乙個引數 引數是基本資料型別 引數不是自身類的型別...