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

C# 3.0新特性深度解析(一):自動實現屬性——告別樣板式Get/Set代碼

     編輯:關於C語言

痛點:傳統屬性寫法繁瑣

C# 2.0時代,為實現封裝需手寫私有字段+公共屬性:

public class UserInfo
{
    private string _userName;
    private string _passWord;
    
    public string UserName
    {
        get { return _userName; }
        set { _userName = value; }
    }
    
    public string PassWord
    {
        get { return _passWord; }
        set { _passWord = value; }
    }
}

雖VS提供Encapsulate Field重構,但屬性多時代碼膨脹明顯,維護成本高。

C# 3.0 自動實現屬性

編譯器自動生成隱私備字段,語法極簡:

public class UserInfo
{
    public string UserName { get; set; }
    public string PassWord { get; set; }
}

使用方式完全兼容

var user = new UserInfo();
user.UserName = "test";
user.PassWord = "test";
Console.WriteLine(user.UserName); // 輸出 test

進階用法:只讀自動屬性

public class Entity
{
    public string Id { get; private set; } // 外部不可寫
    
    public Entity(string id) => Id = id; // 構造函數內可賦值
    public void ResetId(string newId) => Id = newId; // 類內部可寫
}

private set實現「外部只讀、內部可寫」,比readonly字段更靈活(支持延遲初始化、邏輯控制)。

限制與注意

  • 必須同時聲明get與set(可用訪問修飾符差異化)。
  • 無法在自動屬性上直接掛載Attribute(需改用傳統寫法)。
  • 調試時無法直接查看編譯器生成的備字段名(如<UserName>k__BackingField)。

自動屬性是C# 3.0最受歡迎的「語法糖」,大幅提升代碼信噪比。

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