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

C# 類別成員:屬性完整指南 (含驗證邏輯與唯讀屬性)

     編輯:關於C語言

屬性基本語法


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; // 編譯錯誤

自動實作屬性 (C# 3+)


// 可讀寫
public int Age { get; set; }

// 唯讀 (C# 6+)
public int Id { get; } // 僅能在建構函式或初始化器指派

// 初始化器 (C# 6+)
public string Name { get; set; } = "Unknown";

屬性 vs 欄位

特性欄位屬性
封裝性無 (直接存取)可加驗證、延遲載入、通知
介面定義不可可
序列化預設包含可控制 (DataMember 等)
除錯視窗直接顯示需評估 get
二進位相容變更為屬性破壞相容安全

最佳實務

  1. 公開成員永遠用屬性,欄位保持 `private`
  2. 簡單資料用自動實作屬性,複雜邏輯展開完整語法
  3. 避免在 `get`/`set` 中放置耗時操作 (I/O、運算),違反呼叫者預期
  4. 考慮 `init` 存取子 (C# 9+) 實現物件初始化後不可變
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved