.NET Framework 提供建構函式初始化物件,並內建解構函式(Finalizer)在記憶體回收前釋放非受控資源。大多數情況下無需手寫解構函式,由垃圾收集器自動處理。
| 維度 | 實例成員 | 靜態成員 |
|---|---|---|
| 所屬 | 特定物件實例 | 類別本身 |
| 記憶體 | 每個實例擁有獨立副本 | 全程式僅一份,所有實例共享 |
| 存取方式 | instance.Member | ClassName.Member(無需實例化) |
| 典型案例 | 物件狀態(Name, Age) | 工具方法(Console.WriteLine、Math.PI) |
System.Math、System.Consoleclass Person { /* 基類/父類 */ }
class Student : Person { /* 衍生類/子類 */ }
子類自動擁有父類的所有非私有成員(欄位、屬性、方法)。
class Person
{
public string Name, Gender;
public int Age;
public double Weight;
public Person() { /* 預設初始化 */ }
public Person(string n, string g, int a, double w) { /* 參數初始化 */ }
public void Eat(double food) => Weight += food;
}
class Student : Person
{
public string SchoolName;
public double Score;
public int Grade;
public Student() { SchoolName = "CSU"; Score = 99; Grade = 1; }
public void Study(double hours) => Weight -= hours; // 專屬方法
}
// 使用展示
Person man = new Person("Lixiao", "woman", 11, 88);
man.Eat(12);
Student luxiaofeng = new Student();
Console.WriteLine($"{luxiaofeng.Name}, {luxiaofeng.SchoolName}"); // 繼承父類屬性
luxiaofeng.Eat(14); // 呼叫父類方法
luxiaofeng.Study(18); // 呼叫自身方法

object 為終極基類。virtual 且子類用 override 則為多型覆寫。virtual 方法/屬性/索引子允許子類覆寫,實現執行期多型。
class Worker : Person { /* ... */ }
Person student = new Student();
Person worker = new Worker();
student.Eat(10); // 呼叫 Person.Eat 或 Student 覆寫版本
worker.Eat(10); // 同樣語法,實際執行取決於真實物件型別
這正是子型別多型的核心:統一介面,多種實作。
靜態成員提供類別層級共享功能;介面定義行為契約解耦實作;繼承實現「是一種」關係與程式碼重用;虛擬方法配合覆寫構建執行期多型。三者結合構成 C# 面向對象架構的三大支柱。