.net 如何在基类中为init属性使用公共初始化器?

ldfqzlk8  于 2022-12-01  发布在  .NET
关注(0)|答案(1)|浏览(139)

请考虑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"
    };
}

如果没有此功能,requiredinit关键字似乎只对不涉及继承的基本方案有用。
我的问题有点类似于Can I set SetsRequiredMembers or another attribute for only one member in C# 11?,除了那个问题是询问如何将broad属性仅应用于一个属性,而我想知道如何在同一个示例上使用两个不同的初始化器。

c0vxltue

c0vxltue1#

不要对自己太苛刻,使用构造函数。

相关问题