gpt4 book ai didi

c# - 如何通过派生类设置基类的所有属性

转载 作者:行者123 更新时间:2023-11-30 15:51:52 25 4
gpt4 key购买 nike

public BaseClass
{
prop abc;
prop pqr;
prop xyz;
}

public DerivedClass : BaseClass
{
prop New1;
prop New2;

//constructor
public DerivedClass(BaseClass baseObj,someMore params)
{
this.abc = baseObj.abc;
this.pqr = baseObj.pqr;
this.xyz = baseObj.xyz;
/* I do not want to do this for each and every property as I have more than 40 properties */

}
}

在上面的代码中,我如何设置派生类的所有属性,这些属性在派生类中与基类相同。

在我的派生类中我可以在不使用 AutomapperReflection

的情况下做以下类型的事情来实现上述目标吗
public DerivedClass(BaseClass baseObj,someMore params):base(baseObj) //or something similar
{
}

最佳答案

您可以在基类而不是派生类中初始化属性(因为参数和基类共享相同类型的类)。

要复制属性,除了 AutoMapper(我发现它真的很慢)和反射(很难实现和维护)之外,一个简单、非常有效的方法是使用开源库 Omu.ValueInjecter:

NuGet 安装库:

Install-Package ValueInjecter -Version 3.1.3

然后,在您的构造函数中使用它,如下所示:

using Omu.ValueInjecter;

public abstract class BaseClass
{
protected BaseClass(BaseClass baseObj)
{
this.InjectFrom(baseObj);
}

public string Abc { get; set; }
public int Pqr { get; set; }
public object Xyz { get; set; }
}

public class DerivedClass : BaseClass
{
public DerivedClass(BaseClass baseObj, int new1, object new2) : base(baseObj)
{
New1 = new1;
New2 = new2;
}

public int New1 { get; set; }
public object New2 { get; set; }
}

您第一次运行此代码时,它会创建一个映射器并将其存储在内存中,这样您以后执行相同操作的速度就会快得多。

如果您不想使用值注入(inject)器或任何其他库,只需在基类中手动设置属性即可。

public abstract class BaseClass
{
protected BaseClass(BaseClass baseObj)
{
Abc = baseObj.Abc;
Pqr = baseObj.Pqr;
Xyz = baseObj.Xyz;
}

[...]
}

关于c# - 如何通过派生类设置基类的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55829827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com