You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 11中能否为单个成员设置SetsRequiredMembers?继承场景报错求方案

C# 11 相关问题解答

1. 能否仅为单个成员设置SetsRequiredMembers或相关属性?

SetsRequiredMembers是作用于构造函数的特性,用于告知编译器:该构造函数已完成所有required成员的初始化,无需通过其他路径(比如对象初始化器)补充设置。它无法直接应用在单个成员上。

如果需要让某个required成员仅通过特定构造函数完成初始化,核心是给对应构造函数标记SetsRequiredMembers,而非给成员单独添加属性。

2. 示例代码的编译器错误解决办法

你的代码中编译器提示A未设置,是因为它不知道Bar的无参构造函数已经初始化了A。解决方法是给Bar的构造函数添加[SetsRequiredMembers]属性,明确告知编译器该构造函数已处理父类的必填成员。

修改后的代码如下:

public record Foo 
{
  public required string A { get; init; }
  public required string B { get; init; }
}

public record Bar : Foo
{
   [SetsRequiredMembers]
   public Bar()
   {
     A = "TEST";
   }
}

var bar = new Bar
{
  B = "ANOTHER TEST"
};

添加该属性后,编译器会认可构造函数内对A的赋值,不再强制要求在对象初始化器中设置A,仅需补充未被构造函数初始化的B即可。

内容的提问来源于stack exchange,提问作者Ilya Chernomordik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:41:35