省去私有備份欄位與樣板式 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; }(建構函式初始化)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 層面無特殊指令。好處:
get; private set; 搭配建構函式驗證Add 方法,參數數量需與大括號內元素對應