建構函式與解構函式是類別中看似較簡單的兩類函式,但實際運用常出現意想不到錯誤。本文系統介紹原理及 C# 運用,與使用注意事項。
關鍵字:建構函式、解構函式、垃圾收集器、非受控資源、受控資源
C# 提供更好機制增強程式安全性。編譯器具嚴格型別安全檢查,幾乎能找出所有語法問題。但通過編譯不代表錯誤不存在,「語法錯誤」僅冰山一角。高級錯誤隱藏很深,難發現。
經驗顯示,許多難察覺錯誤源於變數未正確初始化或清除,而初始化清除工作易被遺忘。微軟利用面向物件概念設計 C# 時充分考慮此問題:將物件初始化工作放在建構函式,清除工作放在解構函式。物件建立時建構函式自動執行,物件消亡時解構函式自動執行,免除遺忘擔憂。
建構函式命名必須與類別同名,無回傳值型別(不同於 void)。存取類別方法、屬性前,第一條執行語句為相應建構函式。未自寫建構函式,CLR 提供預設建構函式。
class TestClass { public TestClass() : base() {} } // CLR 提供
實現類別實例初始化。可多載:
using System;
class Point
{
public double x, y;
public Point() { this.x = 0; this.y = 0; }
public Point(double x, double y) { this.x = x; this.y = y; }
}
class Test
{
static void Main()
{
Point a = new Point();
Point b = new Point(3, 4); // 用建構函式初始化物件
}
}
重要:類別一旦提供自訂建構函式,CLR 將不再提供預設建構函式,此點必須注意。