class MyClass
{
private int _myInt; // 背欄位
public int MyProperty
{
get => _myInt;
set => _myInt = value >= 0 ? value : 100; // 驗證邏輯
}
}
// 使用
var obj = new MyClass();
obj.MyProperty = 2009; // 2009
obj.MyProperty = -1; // 100 (負數被修正)
僅提供 `get` 存取子,背欄位可在建構函式初始化:
class MyClass
{
private readonly int _myInt = 100;
public int MyProperty => _myInt; // 運算式主體 (C# 6+)
}
// 使用
var obj = new MyClass();
Console.WriteLine(obj.MyProperty); // 100
// obj.MyProperty = 200; // 編譯錯誤
// 可讀寫
public int Age { get; set; }
// 唯讀 (C# 6+)
public int Id { get; } // 僅能在建構函式或初始化器指派
// 初始化器 (C# 6+)
public string Name { get; set; } = "Unknown";
| 特性 | 欄位 | 屬性 |
|---|---|---|
| 封裝性 | 無 (直接存取) | 可加驗證、延遲載入、通知 |
| 介面定義 | 不可 | 可 |
| 序列化 | 預設包含 | 可控制 (DataMember 等) |
| 除錯視窗 | 直接顯示 | 需評估 get |
| 二進位相容 | 變更為屬性破壞相容 | 安全 |