<p>required成员必须在对象初始化时通过对象初始化器显式赋值,是C# 11+的编译期强制约束,不依赖构造函数、不支持字段和init-only属性,继承时不自动传递,且无运行时反射支持。</p>required成员必须在对象初始化时赋值,否则编译报错从 C# 11 开始,required 关键字用于标记类或结构体中的实例成员(目前仅支持 set 访问器的属性或索引器),表示该成员**必须在对象创建时通过对象初始化器显式赋值**。它不是运行时检查,而是编译期强制------没写,直接过不了编译。常见错误现象:CS8852: Required member 'XXX' must be set in the object initializer or attribute constructor.只声明 required 属性但没在 new TypeName { ... } 里赋值 → 编译失败用默认构造函数 new TypeName() 创建对象 → 编译失败(哪怕属性有默认值)在构造函数里赋值但没用对象初始化器 → 不满足 required 要求,依然报错required只能配合对象初始化器使用,不能靠构造函数绕过required 的设计目标是"保证初始化表达式完整",所以它**不关心构造函数逻辑**,只看语法上是否出现在 { } 初始化块中。哪怕你写了个带参数的构造函数并内部设置了该属性,只要初始化时没在 { } 里显式写出,就无效。使用场景:适合 DTO、配置类、不可变轻量模型等需要"一眼看清必填字段"的场合。? 正确:var x = new Person { Name = "Alice", Age = 30 };? 错误:var x = new Person(); x.Name = "Alice";(分两步,不满足语法要求)? 错误:var x = new Person("Alice", 30);(即使构造函数里写了 this.Name = name;,也不算)注意:C# 当前(12)不支持在构造函数参数上加 required,也不能用 required 修饰字段(只能是带 set 的自动属性或显式实现的属性)。required属性必须有可访问的set访问器,且不能是只读或init-onlyrequired 成员底层依赖编译器生成的隐式初始化逻辑,因此它对访问器有硬性限制:必须存在 public 或 internal(取决于上下文可见性)的 set,且不能是 init。如果属性是 public string Name { get; init; },加 required 会报错 CS8853。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能
相关推荐
兵慌码乱41 分钟前
面向桌面端的资产管理系统分层架构设计与核心模块实现hboot2 小时前
AI工程师第三课 - 机器学习基础顾林海7 小时前
Agent入门阶段-编程基础-Python:流程控制呱呱复呱呱10 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的Nturmoils10 小时前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT曲幽14 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API渣波14 小时前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码荣码15 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面兵慌码乱1 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析金銀銅鐵1 天前
[Python] 体验用欧几里得算法计算最大公约数的过程