init访问器是C# 9引入的特性,用于定义只能在对象初始化时赋值的属性。它使属性具备“初始化可设、之后只读”的行为,支持不可变性、与record类型协同、比私有set更灵活,并兼容现代序列化库,提升代码安全性和简洁性。

在C# 9 及更高版本中,init访问器是一种特殊的属性设置器,它允许属性在对象初始化时被赋值,但一旦对象创建完成,就不能再修改。这使得属性具有“初始化时可设,之后只读”的特性。
什么是 init 访问器?
init 是 initialize 的缩写,是 set 访问器的变体。和 set 不同的是,init 只能在对象初始化期间使用(例如使用对象初始化器时),之后无法再通过赋值更改该属性。
这特别适合用于构建不可变对象,同时又希望保持代码简洁。
如何创建只在初始化时可设置的属性?
使用 init 访问器即可实现。下面是一个示例:
public class Person{ public string Name { get; init; } public int Age { get; init; }}
你可以这样初始化对象:
var person = new Person{ Name = "Alice", Age = 30};
但以下代码会编译错误:
person.Name = "Bob"; // 错误:init-only 属性只能在初始化时设置
init 的使用场景和优势
支持不可变性:对象创建后属性不能更改,有助于线程安全和数据一致性与记录类型(record)配合良好:C# 的 record 默认使用 init 访问器比私有 set 更灵活:允许外部在构造时赋值,而不是完全封闭序列化友好:大多数现代序列化库(如 System.Text.Json)支持 init 成员
例如,使用 record 时,属性默认就是 init-only:
public record Point(int X, int Y);// 等价于:// public class Point// {// public int X { get; init; }// public int Y { get; init; }// }
基本上就这些。init 让你在保持对象不可变的同时,还能享受对象初始化器的便利语法。不复杂但很实用。
以上就是C#的init访问器是什么?如何创建只在初始化时可设置的属性?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441971.html
微信扫一扫
支付宝扫一扫