考虑我有两个班级:
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
是第三方,所以我无法改变它们。
答案 0 :(得分:1)
您无法在该语言中自动执行此操作。您可以使用Automaper或手动分配来完成此操作。
答案 1 :(得分:1)
执行此操作的最佳方法是为SimpleChild编写一个构造函数,该构造函数将ComplicatedParent的实例作为参数。然后构造函数将复制数据。您可以尝试使用clone()创建ComplicatedParent的副本,将其强制转换为SimpleChild,添加其他数据并将其返回。
有关克隆的帮助,您可能希望在这个链接上有一个勇气:
答案 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。