Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法从父引用构造子对象?_C#_.net - Fatal编程技术网

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

C# 有没有办法从父引用构造子对象?,c#,.net,C#,.net,假设我有两门课: public class ComplicatedParent { // Lots of data } public class SimpleChild : ComplicatedParent { public string SomeAdditionalData { get; set; } public SimpleChild(string arg) : base() { SomeAdditionalData = arg;

假设我有两门课:

public class ComplicatedParent
{
    // Lots of data
}

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

    public SimpleChild(string arg) : base()
    {
        SomeAdditionalData = arg;
    }
}
SomeFunction
,该函数返回
复杂parent的实例。有没有一种简单的方法可以从父对象的引用构造子对象,从而保留父对象的状态


实际上,
complexedparent
类和
SomeFunction
是第三方,因此我无法更改它们。

您不能用该语言自动执行此操作。您可以使用Automper或手动指定来完成此操作。

最好的方法是为SimpleChild编写一个构造函数,该构造函数将复杂Parent的实例作为参数。然后,构造函数将数据复制到整个数据库中。您可以尝试使用clone()创建complexdparent的副本,将其强制转换为SimpleChild,添加附加数据并返回它

有关克隆的帮助,请访问以下链接:

如果“保留父状态”的意思是保留父类的内部值,那么您不能这样做,您应该自己实现它。比如:

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. 

注意。

如果可以重写父对象的属性,则可以在子构造函数中获取父对象,并将调用委托给内部引用的父对象。如果父属性是虚拟的,这是可能的。

> p>如果代码>复杂的父< /代码>真的是那么复杂,您应该考虑将其拆分为更小的类,并将实例存储在复杂的父< /代码>(聚合,而不是继承)中。如果这些对象是不可变的,那么从原型实现构造应该很容易

对象的构造,考虑