1. 什么是对象初始化器?
对象初始化器就是一种在创建对象的同时,直接给属性赋值的写法。不用先 new 一个对象,再一行一行地赋值。
它的作用是用来给对象初始化的
一定存在:必然要执行构造方法
2. 构造方法与对象初始化器有什么区别

3. 传统写法 vs 初始化器写法
传统写法(啰嗦):
1 2 3 4
| var person = new Person(); person.Name = "张三"; person.Age = 25; person.City = "北京";
|
4. 初始化器写法(简洁):
1 2 3 4 5 6
| var person = new Person { Name = "张三", Age = 25, City = "北京" };
|
看出来没?就是把赋值操作直接塞到 new
语句里,用大括号 {}
包起来。
4. 基本规则
- 属性必须是 public 的(或者有 public 的 set 访问器)
- 用逗号分隔各个属性赋值
- 最后一条不用加分号(但加了也不报错)
- 不需要调用构造函数(当然也可以配合构造函数一起用)
5. 实际例子
简单类
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class Student { public string Name { get; set; } public int Age { get; set; } public string School { get; set; } }
var student = new Student { Name = "李四", Age = 20, School = "清华大学" };
|
配合构造函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class Product { public Product(string name) { Name = name; } public string Name { get; set; } public decimal Price { get; set; } public int Stock { get; set; } }
var product = new Product("iPhone") { Price = 5999, Stock = 100 };
|
嵌套对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class Address { public string Street { get; set; } public string City { get; set; } }
public class Customer { public string Name { get; set; } public Address HomeAddress { get; set; } }
var customer = new Customer { Name = "王五", HomeAddress = new Address { Street = "中关村大街1号", City = "北京" } };
|
集合初始化器(Bonus)
1 2 3 4 5 6 7 8
| var numbers = new List<int> { 1, 2, 3, 4, 5 };
var dictionary = new Dictionary<string, int> { { "苹果", 5 }, { "香蕉", 3 }, { "橙子", 8 } };
|
6. 注意事项
- 不能访问私有字段:初始化器只能设置 public 属性
- **执行顺序**:先执行构造函数,再执行初始化器中的赋值
- null 安全:如果属性是引用类型,默认是 null,记得初始化
7. 什么时候用?
- 创建对象时需要设置多个属性
- 代码可读性要求高(一眼看出对象的初始状态)
- 配置对象、测试数据、临时对象等场景
总结
对象初始化器就是个语法糖,让代码更简洁、更直观。记住这个模式:
1 2 3 4 5 6
| var obj = new ClassName { Property1 = value1, Property2 = value2, };
|
该用就用,别犹豫!