有没有办法从父引用构造子对象?

时间:2011-07-19 13:17:50

标签: c# .net

考虑我有两个班级:

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是第三方,所以我无法改变它们。

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

执行此操作的最佳方法是为SimpleChild编写一个构造函数,该构造函数将ComplicatedParent的实例作为参数。然后构造函数将复制数据。您可以尝试使用clone()创建ComplicatedParent的副本,将其强制转换为SimpleChild,添加其他数据并将其返回。

有关克隆的帮助,您可能希望在这个链接上有一个勇气:

Deep cloning objects

答案 2 :(得分: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. 

问候。

答案 3 :(得分:0)

如果可以覆盖父级的属性,则可以在子构造函数中获取父对象,并将调用委托给内部引用的父级。只有在父属性为虚拟属性时才可以这样做。

答案 4 :(得分:0)

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

在构建对象时,请考虑Prototype pattern