首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Effective C# 原則 7:選擇不可變的原子實值型別(一)

     編輯:關於C語言

不可變型別定義與優勢

不可變型別:建立後狀態永不改變。優勢:

  • 天然執行緒安全:無狀態變更,免鎖
  • 適合做雜湊鍵:GetHashCode() 穩定
  • 安全暴露:呼叫端無法竄改內部狀態
  • 推理簡單:物件建立即定型,減少認知負荷

原子型別 vs 複合型別

  • 原子型別:單一實體,自然不可分割。如 Address(地址)、PhoneNumber、DateTime。修改任一欄位即產生新實體。
  • 複合型別:由多個獨立原子組成。如 Customer(姓名、地址、電話們)。各部分可獨立變更。

策略:將複合型別分解為不可變原子型別組合。

可變 Address 結構反面教材

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 不匹配新城市

問題分析

逐欄位設定導致物件在建構過程中處於不一致狀態。多執行緒可觀測到中間狀態;例外拋出時物件留在損壞狀態。修正需大量驗證與同步碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved