2024-04-29 · C# 基础 · 学习笔记

自动属性与初始化器

自动属性是 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 属性不可修改
学习小结:以上是我学习这个知识点时的笔记和心得。技术学习没有捷径,多写多练多踩坑,自然就掌握了。如果这篇笔记对你有帮助,欢迎继续看看其他文章。