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

C# 3.0自動屬性與匿名類型深度解析(一):自動實現屬性原理、只讀模式與Attribute限制

     編輯:關於C語言

自動實現屬性語法對比

C# 2.0 傳統寫法:

private int _one;
public int One
{
    get { return _one; }
    set { _one = value; }
}

C# 3.0 自動屬性:

public int One { get; set; } // 編譯器自動生成隱私備字段

只讀自動屬性實現

public string Name { get; private set; } // 外部不可寫

內部賦值合法:


public class EDClass
{
    public string Name { get; private set; }
    public EDClass() => Name = "QQ";
    public void SetName() => Name = "QQ"; // 類內部可寫
}

外部賦值編譯錯誤:


var cls = new EDClass();
cls.Name = "QQ"; // 錯誤:set 訪問器不可訪問

自動屬性與Attribute的限制

不能在自動屬性上直接掛載Attribute**:


// 錯誤示範
[SomeAttribute]
public string Name { get; set; } // Attribute實際作用於隱藏的備字段,無法控制

若需Attribute控制備字段,必須改用傳統寫法:


[SomeAttribute]
private string _name;
public string Name { get => _name; set => _name = value; }

編譯器生成的IL結構

  • 自動生成<PropertyName>k__BackingField命名的私有字段。
  • get/set方法直接訪問該字段,無額外邏輯。
  • 屬性元數據保留完整,反射行為與手寫屬性一致。

總結

自動屬性極大減少樣板代碼,private set優雅實現「外部只讀、內部可寫」,但Attribute場景需退回傳統寫法。理解編譯器生成機制有助於調試與序列化場景排查。

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