類別是 C# 程式設計的核心結構。本章涵蓋建構函式與解構函式、方法定義、參數傳遞模式(輸入、參考、輸出)、方法覆寫與遮蔽、屬性存取子、索引子與事件實作等關鍵主題。
public,若類別僅含靜態成員可設為 private 防止實例化。public TestClass(string name, int age)。base()。解構函式命名為 ~TestClass(),由垃圾收集器非決定性呼叫。為確保寶貴資源(檔案控制代碼、資料庫連線等)及時釋放,建議實作 Release() 方法並在解構函式中呼叫:
public void Release() {
// 釋放所有非受管理資源
}
public ~TestClass() {
Release();
}
雖非強制,但這是良好的程式設計習慣。
預設模式,以值傳遞變數副本。方法內修改不影響原變數。可傳遞常值運算式:CalcSquare(25)。對參考型別(類別實例),傳遞的是參考副本,仍指向同一物件。
使用 ref 關鍵字,傳遞變數記憶體位址,方法可修改原變數值。呼叫前變數必須初始化。範例:
public void CalcSquare(ref int n) { n *= n; }
int val = 20; CalcSquare(ref val); // val 變為 400
使用 out 關鍵字,專門用於從方法傳回結果。呼叫前變數不需初始化,方法必須在返回前賦值。適合多重回傳值情境。範例:
public void CalcSquare(int side, out int result) { result = side * side; }
int squared; CalcSquare(15, out squared); // squared = 225
基類以 virtual 標記可覆寫方法,衍生類使用 override 重新定義。覆寫時不可改變存取層級。範例:
public virtual void CanBOverridden() { }
public override void CanBOverridden() { }
若衍生類定義相同簽章方法但不標記 override,預設為遮蔽(隱藏)基類方法。使用 new 關鍵字可明確表示意圖並消除編譯器警告。透過基類參考呼叫時,遮蔽方法不會被多型調度。
屬性透過 get(讀取)與 set(寫入)存取子封裝資料,隱藏內部儲存細節。可實現唯讀(僅 get)、唯寫(僅 set)或讀寫屬性。set 存取子隱含 value 參數代表新值。範例:
private int _sqFeet;
public int SquareFeet {
get { return _sqFeet; }
set { _sqFeet = value; }
}
掌握建構函式、解構函式、三種參數傳遞模式、方法覆寫與遮蔽、屬性封裝,是撰寫健壯 C# 類別的基礎。下章將繼續探討索引子、事件與存取修飾詞等進階主題。