在C#中从派生类对象创建新的基类对象

时间:2014-01-29 11:16:49

标签: c# wcf types type-conversion

我有一个Derived类型的对象,但想拥有Base类型的对象。通常,我可以简单地将对象强制转换为Base的引用。但是,对于我的WCF服务,我真的只想公开Base类。

是否有一种巧妙的方法可以将Base转换为Derived对象(或从Base对象创建新的Derived),其中动态类型为{{ 1}}?

示例:

Base

2 个答案:

答案 0 :(得分:0)

如果您要实现的目的是隐藏Derived类的额外属性,那么有两个选项

  1. 消费者允许您明确指定类型
  2. 或者你必须改变你的设计。
  3. 在第二种情况下,您应该考虑使用合成而不是继承,例如

    • BaseDerived个对象包装到一个只展示所需属性的新适配器类中
    • 按原样使用Base类,但不是通过派生它来添加额外的功能,而是使用组合:Base类将包含另一个定义行为某些方面的对象。

    恐怕没有具体的例子很难帮助你。

答案 1 :(得分:0)

如果没有其他内容出现,我将接受我自己的hackaround作为解决方案:使用AutoMapper将Derived克隆为新的Base

Mapper.CreateMap<Base,Base>();
Mapper.Map<Base,Base>(objectOfTypeDerived);