自动属性与初始化器
自动属性是 C# 3 的特性,不用手写私有字段,编译器自动生成。get 和 set 可以分开设置访问级别,也可以用 init 表示只能在初始化时赋值。
init 是 C# 9 引入的,{ get; init; } 的属性只能在对象初始化器里设置,创建后就不能改了,这对 DTO 和不可变对象特别合适。{ get; } 是只读属性,只能在构造函数里赋值。
实践建议:DTO 用 init 属性保证不可变;需要在业务逻辑里修改的用 get/set;计算属性用 expression-bodied 写法。
代码示例
// 完整读写属性
public string Name { get; set; } = "";
// 只读属性:get 只有,构造函数赋值
public DateTime CreateTime { get; }
// init:只能初始化时设置
public int Age { get; init; }
// 只读计算属性(expression-bodied)
public string FullName => $"{FirstName} {LastName}";
// 完整类示例
public class User
{
public string Name { get; set; } = "";
public int Age { get; init; }
public DateTime CreateTime { get; }
public User()
{
CreateTime = DateTime.Now;
}
}
var u = new User { Name = "Tom", Age = 25 };
// u.Age = 30; // 错误,init 属性不可修改
学习小结:以上是我学习这个知识点时的笔记和心得。技术学习没有捷径,多写多练多踩坑,自然就掌握了。如果这篇笔记对你有帮助,欢迎继续看看其他文章。