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
相关产品推荐
相关产品推荐

