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

C# 3.0 系列:自動實作屬性 (2) — 進階規則與限制

     編輯:關於C語言

與抽象屬性的差異

自動實作屬性不能用 abstract 修飾:

abstract class People
{
    public abstract string Name { get; set; } // 抽象屬性:合法
    public abstract int Age { get; set; }
}
// 自動屬性寫法:
// public string Name { get; set; } // 非抽象,編譯器會自動產生後端欄位

不可定義「唯讀」或「唯寫」自動屬性

必須同時提供 get 與 set 存取子,否則編譯錯誤:

public string Name { get; } // 錯誤:自動屬性必須有 get 和 set

若需唯讀,請改用傳統屬性寫法搭配 readonly 欄位,或將 set 設為 private。

可為讀寫指定不同存取層級

這是自動屬性的一大優勢:

public int Age { get; private set; } // 外部可讀,內部可寫

自動屬性的初始化機制

  • 編譯器會為後端欄位自動賦予型別預設值:參考型別為 null,值型別為 0、false 等。
  • 若需自訂初始值,必須在建構函式中指派:
public Employee(string name, int age)
{
    this.Name = name;
    this.Age = age;
}

不適用場景:需要驗證邏輯時

自動屬性無法在 get/set 中加入自訂邏輯(如範圍檢查)。此時必須回傳傳統寫法:

private int _age;
public int Age
{
    get { return _age; }
    set
    {
        if ((value > 0) && (value < 500))
            _age = value;
        else
            throw new ArgumentOutOfRangeException("你不是人!");
    }
}

小結

自動實作屬性極大簡化了單純資料封裝的程式碼,但不是萬能鑰匙:需要驗證、計算、側效應等邏輯時,仍須手寫完整屬性。

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