新闻中心
C#的init访问器是什么?如何创建只在初始化时可设置的属性?
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; }
}
你可以这样初始化对象:
CA.LA
第一款时尚产品在线设计平台,服装设计系统
94
查看详情
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访问器是什么?如何创建只在初始化时可设置的属性?的详细内容,更多请关注其它相关文章!
# 更灵活
# 如何介绍网站建设专业
# 电商运营推广企业网站
# 毕节全网营销推广
# 数字营销推广排名好
# 淘宝网发布网站建设
# ppt网站建设方案
# 涟水营销网站建设
# 分销seo
# 廊坊企业网站推广
# 海外谷歌seo服务
# 是一种
# js
# 是一个
# 的是
# 操作指南
# 如何将
# 如何使用
# 只能在
# 序列化
# 只在
# 编译错误
# c#
# json
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
极兔快递快件信息查询系统 极兔快递官网运单号追踪
html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】
c++中的std::basic_string的SSO优化_c++短字符串优化深度解析
Steam官网入口直达 Steam注册及登录步骤
Go语言中的*string:深入理解字符串指针
狙击外星人小游戏开始_狙击外星人小游戏立即开始
“音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!
C++ map遍历方法大全_C++ map迭代器使用总结
b站怎么取消点赞_b站点赞取消操作方法
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
qq游戏免费畅玩入口_qq游戏电脑版快速启动
一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化
夸克浏览器图书入口 夸克手机浏览器阅读入口
J*a TimerTask中HashMap意外清空的深层原因与解决方案
在python-socketio事件处理器中安全访问Flask应用上下文
C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件
必由学在线入口 必由学网页版快速登录入口
Win10双系统截图高效法 截屏快捷键速记【技巧】
现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践
Excel Power Pivot如何处理XML数据源 构建高级数据模型
动漫岛观看全网网 动漫岛在线正版动漫入口
谷歌邮箱注册显示错误Gmail服务器异常与延迟处理
Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】
谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航
mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析
微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程
我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口
如何更改在 Excel 中打开超链接时的默认浏览器
字由网在线版登录地址 字由网网页版安全入口
如何使 Jest 模拟函数默认抛出错误以提高测试效率
高德地图怎么看全景照片_高德地图全景照片浏览教程
在Runstone环境中高效处理TasteDive API的JSON数据
抖音极速版最新版本 抖音极速版官方下载地址
QQ邮箱登录官网首页 腾讯QQ邮箱网页入口
Kafka Streams中基于消息头条件过滤消息的实现指南
汽车之家官方网站官网入口_汽车之家网页版直接进入
mc.js免安装版 mc.js一键畅玩入口
12306选座如何查看座位示意图_12306座位示意图解读与使用
Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问
Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技
在VS Code中配置和运行Dart程序的完整步骤
必由学网页版入口 必由学官方平台直接访问
自定义Bag-of-Words实现:处理带负号的词汇权重
火锅吃太多会怎样 火锅吃太多会上火吗
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程
MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏


2025-11-21
浏览次数:次
返回列表
赋值的属性。它使属性具备“初始化可设、之后只读”的行为,支持不可变性、与record类型协同、比私有set更灵活,并兼容现代序列化库,提升代码安全性和简洁性。