继承:如何将对象从主类复制到子类



为了进行导出,我需要重载一个对象,以便添加一个属性,该属性将从主类转换属性:

public class A
{
public int MyProperty1 { get; set; };
public int MyProperty2 { get; set; };
/*...*/
public myType MyPropertyN { get; set; };
}
public class B : A
{
public override string MyProperty1
{
get :
{
return A.MyProperty1.ToString();
}
set :
{
a.MyProperty1 = int.parse(value);
}
}
}

问题是我的A对象已经实例化,因为模型来自数据库。

我正在寻找一个解决方案,我可以做这样的事情:

var List<A> myListOfA = PopulateFromSomewhere();
var List<B> myListOfB = myListOfA.Select(x => new B(x)).ToList();

其中A将在B中复制,然后在我的导出中调用B。我不想在B的构造函数中手动复制A的所有属性。有些对象有20多个属性。

大多数时候,更改类的返回类型是糟糕设计的标志。特别是,这意味着你应该更喜欢组合而不是继承。

话虽如此,你实际想要的是将一个类映射到另一个类。你可以自己做,例如:

class A 
{ 
int MyProperty { get; set; }
}
class B 
{
private readonly A a;
public B(A a) { this.a = a; }
}

现在您可以轻松实现映射:

class B
{
public string MyProperty
{
get => this.a.MyProperty.ToString();
set => { this.a.MyProperty = int.Parse(value); } // consider to check the value before conversion
}
}

这只是一个基本的想法。由于您的模型可能会变得巨大,并且自己进行映射会变得非常麻烦,因此您最好使用一些自动映射器,例如AutoMapper。

最新更新