C#的required关键字的具体使用
作者:siyun.chen
C#11引入的required关键字强制要求某些属性或字段在对象初始化时必须被显式赋值,增强了代码的安全性和灵活性,本文就来介绍一下C#的required关键字的具体使用,感兴趣的可以了解一下
在 C# 11 中引入了 required 关键字,用于强制要求某些属性或字段在对象初始化时必须被显式赋值。这一特性增强了代码的安全性,确保关键成员不会被遗漏初始化,同时保持了对象初始化的灵活性(例如使用对象初始化器)。
核心概念
- 作用:标记类或结构体中的属性/字段为“必须初始化”的成员。
- 强制赋值:创建对象时,必须为所有
required成员提供初始值,否则编译器报错。 - 兼容性:可与构造函数、对象初始化器(
new Type { Prop = value })结合使用。 - 与构造函数的对比:相比通过构造函数参数强制初始化,
required允许更灵活的初始化方式(如按名称赋值)。
基本用法
1. 定义required成员
public class Person
{
public required string Name { get; set; }
public required int Age { get; set; }
}
2. 初始化时必须赋值
// 正确:通过对象初始化器赋值
var person = new Person { Name = "Alice", Age = 30 };
// 错误:缺少 Age 的赋值
var invalidPerson = new Person { Name = "Bob" }; // 编译错误!
与构造函数的协作
若构造函数已初始化 required 成员,需标记 [SetsRequiredMembers] 特性,避免重复赋值:
public class Person
{
public required string Name { get; set; }
public required int Age { get; set; }
[SetsRequiredMembers]
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
// 调用构造函数时,无需再初始化 required 成员
var person = new Person("Alice", 30);
注意事项
- 适用类型:
required可用于属性或字段,支持引用类型和值类型。 - 不可省略:未初始化
required成员会导致编译错误。 - 与 Nullable 的协作:
public required string? OptionalDescription { get; set; } // 允许可为 null 的 required 成员 - 版本要求:需使用 C# 11 或更高版本(.NET 7+)。
使用场景
- 替代多参数构造函数:当类有大量必填属性时,避免编写冗长的构造函数。
- 明确初始化责任:强制调用方为关键属性提供值,减少运行时错误。
- DTO 或配置对象:确保反序列化或配置绑定时必要字段被赋值。
示例:灵活初始化
public class Configuration
{
public required string ApiKey { get; set; }
public int Timeout { get; set; } = 30; // 非 required,可省略(使用默认值)
}
// 初始化时只需赋值 ApiKey
var config = new Configuration { ApiKey = "secret-key" };
通过 required 关键字,C# 提供了一种更直观、安全的方式确保对象初始化的完整性,尤其适用于现代 API 设计和数据模型定义。
到此这篇关于C#的required关键字的具体使用的文章就介绍到这了,更多相关C# required关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
