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

C# 3.0 / .NET 3.5 新特性:自動屬性、物件初始化器與集合初始化器

     編輯:關於C#

自動實作屬性

省去私有備份欄位與樣板式 get/set,編譯器自動產生後端欄位:

// C# 2.0 冗長寫法
public class Person {
    private string _firstName;
    public string FirstName { get => _firstName; set => _firstName = value; }
}

// C# 3.0 自動屬性
public class Person {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
  • 唯讀屬性:public string Id { get; }(建構函式初始化)
  • C# 6.0+ 支援初始化:public string Name { get; set; } = "Default";

物件初始化器

建立物件時以大括號語法直接設定屬性,無需呼叫建構函式多載:

// 傳統
var p = new Person();
p.FirstName = "小兵";
p.LastName = "網魂";
p.Age = 23;

// 物件初始化器
var p = new Person { FirstName = "小兵", LastName = "網魂", Age = 23 };

可搭配建構函式:new Person("基礎值") { Age = 23 }

集合初始化器

針對實作 IEnumerable 且有 Add 方法的集合,以巢狀大括號一次加入多個元素:

// 傳統 List.Add 逐筆加入
var list = new List();
list.Add(new Person { FirstName = "小兵", LastName = "網魂", Age = 23 });
list.Add(new Person { FirstName = "QQing", LastName = "Lai", Age = 22 });

// 集合初始化器
var list = new List {
    new Person { FirstName = "小兵", LastName = "網魂", Age = 23 },
    new Person { FirstName = "QQing", LastName = "Lai", Age = 22 },
    new Person { FirstName = "Xbing", LastName = "My", Age = 20 }
};

適用於 List<T>、Dictionary<K,V>(new Dictionary { { "key", value } })、自訂集合類別。

巢狀組合:一行建立完整物件圖

var department = new Department {
    Name = "研發部",
    Employees = new List {
        new Person { FirstName = "小兵", Age = 23 },
        new Person { FirstName = "青青", Age = 22 }
    }
};

編譯器背後做了什麼?

以上語法糖編譯為對應的屬性設定與 Add 呼叫,IL 層面無特殊指令。好處:

  • 程式碼更簡潔、可讀性高
  • 減少建構函式多載爆炸
  • 非常適合單元測試資料建立、DTO 初始化

注意事項

  • 自動屬性無法加入驗證邏輯,需改用完整屬性或 C# 7.0+ get; private set; 搭配建構函式驗證
  • 集合初始化器要求型別有公開 Add 方法,參數數量需與大括號內元素對應
  • 結構體使用物件初始化器時,會先建立暫存副本再複製,效能略有影響
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved