不可變型別:建立後狀態永不改變。優勢:
GetHashCode() 穩定Address(地址)、PhoneNumber、DateTime。修改任一欄位即產生新實體。Customer(姓名、地址、電話們)。各部分可獨立變更。策略:將複合型別分解為不可變原子型別組合。
public struct Address
{
public string Line1 { get; set; }
public string Line2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public int ZipCode { get; set; }
}
// 使用
var a1 = new Address();
a1.Line1 = "111 S. Main";
a1.City = "Anytown";
a1.State = "IL";
a1.ZipCode = 61111;
// 修改城市 → 物件進入暫態無效狀態
a1.City = "Ann Arbor"; // State=IL, Zip=61111 不匹配新城市
逐欄位設定導致物件在建構過程中處於不一致狀態。多執行緒可觀測到中間狀態;例外拋出時物件留在損壞狀態。修正需大量驗證與同步碼。