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

C# 建立不可變、原子性值型別 (3/3):readonly 欄位與建構函式強制一致性

     編輯:關於C語言

實作不可變值型別 Address


public struct Address
{
    private readonly string _province;
    private readonly string _city;
    private readonly string _zip;

    public Address(string province, string city, string zip)
    {
        _province = province;
        _city = city;
        _zip = zip;
        CheckZip(zip); // 驗證格式
    }

    public string Province => _province;
    public string City => _city;
    public string Zip => _zip;

    private void CheckZip(string zip)
    {
        if (!System.Text.RegularExpressions.Regex.IsMatch(zip, @"^\d{6}$"))
            throw new ArgumentException("郵遞區號必須為 6 位數字");
    }

    public override string ToString() => $"Province: {_province}, City: {_city}, Zip: {_zip}";
}

關鍵設計

  • readonly 欄位:編譯期保證建構後不可變更。
  • 單一建構函式:原子性 — 所有欄位一次性初始化,避免物件處於「半初始化」狀態。
  • 屬性唯讀 (僅 get):公開介面不暴露設值管道。
  • 驗證邏輯集中在建構函式:確保不變條件 (Invariant) 自建立即生效。

測試驗證


var a = new Address("陝西", "西安", "710068");
try {
    a = new Address("青島", "山東", "22233"); // 驗證失敗拋出例外
} catch { }
Console.WriteLine(a); // 輸出:Province: 陝西, City: 西安, Zip: 710068 (原物件未變)

重新指派變數 a 為新實例,若建構失敗,原變數仍保持舊值,狀態一致性獲得保障。

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