请考虑C# 11中的以下类:
class BaseClass
{
public required string BaseProperty { get; init; }
}
class ChildClass : BaseClass
{
public required string ChildProperty { get; init; }
}
初始化派生类的标准方法是:
var a = new ChildClass
{
BaseProperty = "abc",
ChildProperty = "def"
};
这可以很好地工作,但是如果基类有很多属性或者有很多派生类,这就变得很乏味了。有没有办法为基类使用一个公共的、集中式的初始化器,这样就只需要为派生类初始化额外的属性?类似于(发明的语法如下):
void Main()
{
var a = new ChildClass : BaseInitializer()
{
ChildProperty = "def"
};
}
BaseClass BaseInitializer()
{
return new BaseClass
{
BaseProperty = "abc"
};
}
如果没有此功能,required
和init
关键字似乎只对不涉及继承的基本方案有用。
我的问题有点类似于Can I set SetsRequiredMembers or another attribute for only one member in C# 11?,除了那个问题是询问如何将broad属性仅应用于一个属性,而我想知道如何在同一个示例上使用两个不同的初始化器。
1条答案
按热度按时间c0vxltue1#
不要对自己太苛刻,使用构造函数。