C# 是一門強型別、面向對象的語言,其類型系統是編寫健壯代碼的基石。本文系統梳理類、結構、構造函數、this、static 等核心概念,並通過實戰代碼揭示最佳實踐。
類使用 class 關鍵字定義,封裝字段(狀態)與方法(行為)。字段建議標記為 private,通過屬性暴露受控訪問:
public class Car {
private int _speed;
private string _name;
public int Speed {
get => _speed;
set => _speed = value;
}
public string Name {
get => _name;
set => _name = value;
}
// 默認構造函數
public Car() { }
// 自定義構造函數
public Car(string name, int speed) {
_name = name;
_speed = speed;
}
public void ShowState() => Console.WriteLine($"Car {_name} is going {_speed} MPH");
}
new引用類型必須用 new 在堆上分配內存:
Car c = new Car("Bruce Wong", 150); // 正確
// Car c; c.Name = "Bruce"; // 編譯錯誤:未初始化
當類擁有多個構造函數時,將驗證邏輯集中在「主構造函數」中,其他構造函數用 this 鏈式調用:
public class Car {
public int Speed { get; set; }
public string Name { get; set; }
public Car() : this("", 0) { }
public Car(int speed) : this("", speed) { }
public Car(string name) : this(name, 0) { }
// 主構造函數:集中驗證邏輯
public Car(string name, int speed) {
Name = name;
Speed = speed > 150 ? 150 : speed; // 業務規則:最高時速 150
}
}
執行順序:調用者 → 主構造函數 → 調用者構造函數體。這極大簡化維護。
this 關鍵字的三大用法this.name = name;)public class CarCollection : IEnumerable {
private ArrayList _cars = new ArrayList();
public Car this[int index] {
get => (Car)_cars[index];
set => _cars.Insert(index, value);
}
// ... 實現 IEnumerable
}
static 成員屬於類而非實例,無需創建對象即可調用:
// Console.WriteLine 是靜態方法
Console.WriteLine("Hello"); // 正確
// new Console().WriteLine("Hello"); // 錯誤
關鍵規則:
若在實例構造函數初始化靜態字段,每次 new 都會重置。靜態構造函數保證僅執行一次,在首次創建實例或訪問靜態成員前由 CLR 自動調用:
public class AppConfig {
public static string ConnectionString { get; private set; }
// 無訪問修飾符、無參數、僅一個
static AppConfig() {
ConnectionString = LoadFromConfigFile(); // 複雜初始化邏輯
}
}
執行順序:靜態構造函數 → 實例構造函數。
標記為 static class 後:
new)sealed,不可繼承static class Program {
static void Main(string[] args) { /* 入口點 */ }
}
掌握類型系統細節,能寫出更安全、可維護、高性能的 C# 代碼。記住:封裝字段、善用構造函數鏈、正確理解靜態與實例的邊界,是進階開發者的必修課。