从基础对象转换为继承的对象

时间:2009-08-20 07:46:35

标签: c# mapping poco

我试图采取与你通常做的相反的方式。

我有两个POCO类A和B,其中B继承自A

public class A
{
   public int Foo { get; set; }
}

public class B : A
{
   public int Bar { get; set; }
}

B是对A的延伸,附加信息。

我首先要有一个A类实例

A a = new A { Foo = 1 };

然后我希望用附加信息扩展A类中的信息并获得最终的B类。我可以将A类中的每个属性映射到B类中的属性,但它对我没有多大意义:

A a = new A { Foo = 1 };
B b = new B { Foo = a.Foo, Bar = 2 };

或者在构造函数

A a = new A { Foo = 1 };
B b = new B(a) { Bar = 2 }; // Mapping of value Foo is done in constructor of object B

结果是eather案例中从对象A到B的值的手动映射。 必须有一个更聪明的方法来做这个...任何建议?

2 个答案:

答案 0 :(得分:0)

我认为“聪明”的方式是你的最后一个建议 - 为B知道如何从A实例化自己的复制构造函数。

答案 1 :(得分:0)

如果您实际上正在更改类型(而不是强制转换) - 那么如果您只有几个类,那么只需编写转换代码 - 也许是B接受模板A的ctor。如果你有很多课程......你可以用动态代码或序列化来做一些技巧。 MiscUtil中的PropertyCopy会执行此操作,例如(使用动态Expression来快速完成工作):

A a = new A { Foo = 1 };
B b = PropertyCopy<B>.CopyFrom(a);
b.Bar = 2;