2011-07-19 49 views
1

考虑我有2类:有没有办法从父引用构造子对象?

public class ComplicatedParent 
{ 
    // Lots of data 
} 

public class SimpleChild : ComplicatedParent 
{ 
    public string SomeAdditionalData { get; set; } 

    public SimpleChild(string arg) : base() 
    { 
     SomeAdditionalData = arg; 
    } 
} 

而且SomeFunction返回的ComplicatedParent实例。是否有一种简单的方法从父母的参考构建孩子,保护父母的状态?

其实ComplicatedParent类和SomeFunction是第三方,所以我不能改变它们。

回答

1

您无法在语言中自动执行此操作。您可以使用Automaper或手动分配来完成。

1

做到这将是写SimpleChild一个构造函数ComplicatedParent的一个实例作为参数的最好方法。然后构造函数将会复制数据。您可以尝试使用clone()创建ComplicatedParent的副本,将其转换为SimpleChild,添加其他数据并将其返回。

有关克隆,你可能想在这个环节甘德帮助:“维护父状态”你的意思是保存假设父类的内部值

Deep cloning objects

0

如果,你不能那样做,你应该自己实现它。例如:

public static SimpleChildFromParent(ComplicatedParent cp); // static method in SimpleChild class. 

//and somewhere in the code 

SimpleChild sc = SimpleChild.SimpleChildFromParent(cp); // where cp is ComplicatedParent previously created and intialized. 

问候。

0

如果你可以重写你的父母的属性,你可以在孩子的构造函数的父对象,并委托给内部引用父的电话。这只有在父属性是虚拟的时才有可能。

0

如果ComplicatedParent真的是那么复杂,你应该考虑将它拆分成更小的类并将这些实例存储到ComplicatedParent(聚合,而不是继承)中。如果这些对象是不可变的,那么从原型实现构造应该很容易。

由于对象的建设,考虑Prototype pattern

相关问题