封裝核心在於將實作細節隱藏於類別內部,僅透過公開介面(屬性、方法)與外界互動。呼叫端只需知道「做什麼」,無需關心「怎麼做」。
Person man = new Person("Lixiao", "woman", 11, 88);
man.Eat(12); // 呼叫端不知 Eat 內部如何修改 Weight
好處:
set 或方法內,保護資料完整性同一類別內,方法名相同、參數列表不同(型別、數量、順序),回傳型別可同可不同:
public void Hi() => Console.WriteLine("Hi, C#");
public void Hi(string name) => Console.WriteLine($"Hi, {name}");
編譯期根據引數型別綁定對應方法(靜態多型)。
衍生類重新定義基類 virtual 或 abstract 成員,嚴格要求:
virtual、abstract 或 override執行期根據物件實際型別動態派發(動態多型)。

class Student : Person { }
class Worker : Person { }
Student s = new Student(); s.Eat(15);
Worker w = new Worker(); w.Eat(15);
// 相同語法,實際執行 Person.Eat 或各自覆寫版本
| 關係 | 定義 | 生命週期 | 典型案例 |
|---|---|---|---|
| 繼承 | Is-a(是一種) | 子類依賴父類 | Student : Person |
| 包含/組合 | Has-a(擁有),強擁有 | 部分隨整體銷毀 | Car 包含 Engine |
| 聚合/集合 | Has-a,弱關聯 | 部分可獨立存在 | Department 包含多個 Employee |
List<T>、ArrayList):動態增刪、支援索引/排序/搜尋、Item 屬性按索引存取
Student[] students = new Student[20]; // 陣列
// 集合範例
var list = new List();
list.Add(new Student());
list.RemoveAt(0);
事件是物件狀態變化的通知機制,Windows Forms/WPF 大量使用。範例:按鈕點擊計數器:
int count = 0;
private void button1_Click(object sender, EventArgs e)
{
count++;
textBox1.Text = count.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
count--;
textBox1.Text = count.ToString();
}

事件模式:發布者宣告事件 → 訂閱者註冊處理器 → 觸發時自動回呼。
| 特性 | 值類型 | 參考類型 |
|---|---|---|
| 儲存內容 | 直接包含資料 | 儲存指向資料的參考(位址) |
| 記憶體位置 | Stack(棧)或內嵌於物件 | Heap(堆) |
| 指派行為 | 複製資料本身 | 複製參考,指向同一物件 |
| 預設值 | 型別零值(0, false, 結構體零初始化) | null |
| 典型型別 | int, double, struct, enum | class, string, array, delegate |
// 值類型:獨立副本
int a = 10; int b = a; b = 20; // a 仍為 10
// 參考類型:共享參考
StringBuilder s1 = new StringBuilder("Hello");
StringBuilder s2 = s1;
s2.Append(" World"); // s1 也變成 "Hello World"
理解此差異對避免非預期副作用、設計不可變型別、優化效能至關重要。
封裝建立清晰邊界,多型提供彈性擴展,組合/聚合實現鬆耦合物件圖,事件驅動支援互動式應用,值/參考類型區別決定資料流向與記憶體行為。五大支柱共同構成 C# 進階物件導向設計的完整知識體系。