C#的init访问器是什么?如何创建只在初始化时可设置的属性?

月夜之吻
发布: 2025-11-21 16:46:02
原创
306人浏览过
<p>init访问器是C# 9引入的特性,用于定义只能在对象初始化时赋值的属性。它使属性具备“初始化可设、之后只读”的行为,支持不可变性、与record类型协同、比私有set更灵活,并兼容现代序列化库,提升代码安全性和简洁性。</p>

c#的init访问器是什么?如何创建只在初始化时可设置的属性?

在C# 9 及更高版本中,init访问器是一种特殊的属性设置器,它允许属性在对象初始化时被赋值,但一旦对象创建完成,就不能再修改。这使得属性具有“初始化时可设,之后只读”的特性。

什么是 init 访问器?

initinitialize 的缩写,是 set 访问器的变体。和 set 不同的是,init 只能在对象初始化期间使用(例如使用对象初始化器时),之后无法再通过赋值更改该属性。

这特别适合用于构建不可变对象,同时又希望保持代码简洁。

如何创建只在初始化时可设置的属性?

使用 init 访问器即可实现。下面是一个示例:

public class Person
{
    public string Name { get; init; }
    public int Age { get; init; }
}
登录后复制

你可以这样初始化对象:

GPTKit
GPTKit

一个AI文本生成检测工具

GPTKit 108
查看详情 GPTKit

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访问器是什么?如何创建只在初始化时可设置的属性?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号