C# 構造函數(shù)和析構函數(shù)
在c#中定義類時,常常不需要定義相關的構造函數(shù)和析構函數(shù),因為在編寫代碼時,如果沒有提供它們,編譯器會自動添加它們。但是,如有必要,可以提供自己的構造函數(shù)和析構函數(shù),以便初始化對象和清理對象。使用下述語法可以把一個簡單的構造函數(shù)添加到類中:
class MyClass
{
public MyClass()
{
// Constructor code.
}
}
這個構造函數(shù)與包含它的類同名,且沒有參數(shù)(使其成為類的默認構造函數(shù)),這是一個公共函數(shù),所以類的對象可以使用這個構造函數(shù)進行實例化。
也可以使用私有的默認構造函數(shù),一般僅包含靜態(tài)成員的類會使用。即不能用這個構造函數(shù)來創(chuàng)建這個類的對象實例:
class MyClass
{
private MyClass()
{
// Constructor code.
}
}
最后,通過提供參數(shù),也可以采用相同的方式給類添加非默認的構造函數(shù),例如:
class MyClass
{
public MyClass(}
{
// Default constructor code.
}
public MyClass (int myInt)
{
// Nondefault constructor code (uses raylnt).
}
}
可提供的構造函數(shù)的數(shù)量不受限制(當然不能耗盡內(nèi)存,也不能有相同的參數(shù)集,所以“幾乎不受限”更合適)。
使用略微不同的語法來聲明析構函數(shù)。在.NET中使用的析構函數(shù)(由System.Object類提供鄉(xiāng)為Finalize(),但這不是我們用于聲明析構函數(shù)的名稱。使用下面的代碼,而不是重寫Finalize():
class MyClass
{
^MyClass()
{
// Destructor body.
}
}
類的析構函數(shù)由帶有?前綴的類名來聲明(構造函數(shù)也使用類名聲明)。當進行垃圾回收時,就執(zhí)行析構函數(shù)中的代碼,釋放資源。調(diào)用這個析構函數(shù)后,還將隱式地調(diào)用基類的析構函數(shù),包括System.Object根類中的Finalize()調(diào)用。該技術可以讓.NETFramework確保調(diào)用Finalize(),因為重寫FinalizeO則意味著需要顯式地執(zhí)行基類調(diào)用,這具有潛在危險。
點擊加載更多評論>>