如何在对象的内联创建中引用父对象
本文关键字:对象 创建 引用 | 更新日期: 2023-09-27 18:03:46
假设我有一个父/子关系对象,并尝试内联创建一个父对象(我不确定这个词是否正确)。有可能在自己的创建代码中引用创建的父对象吗?
Parent = new Parent(
{
Name = "Parent",
Child= new Child(/*ReferenceToParent*/)
});
解决这个问题的唯一方法是Parent
构造函数自己调用Child
构造函数并传入this
。你的对象初始化器(我假设你正在尝试这样做)可以在子对象上设置其他属性:
public class Parent
{
public Child Child { get; private set; }
public string Name { get; set; }
public Parent()
{
Child = new Child(this);
}
}
public class Child
{
private readonly Parent parent;
public string Name { get; set; }
public Child(Parent parent)
{
this.parent = parent;
}
}
:
Parent parent = new Parent
{
Name = "Parent name",
// Sets the Name property on the existing Child
Child = { Name = "Child name" }
};
我会尝试避免这种关系-随着时间的推移,它会变得越来越棘手。
您不能这样做,因为还没有创建Parent的实例。如果child在其构造函数中需要Parent的实例,则必须创建一个。首先创建Parent的实例,然后将Parent传递给构造函数,然后将Child的实例赋值给Parent的属性。
var parent = new Parent
{
Name = "Parent",
//More here...
};
var child = new Child(parent);
parent.Child = child;
不能,因为引用在构造函数执行完成后才开始引用分配的对象。
这是相当旧的,它看起来没有新的解决方案,在较新的c#版本,不是吗?如果有,请分享。
同时,我想添加另一个类似于接受的解决方案,但不同。它假定您可以更改Parent类。
using System;
public class Program
{
public static void Main()
{
Parent p = new Parent()
{
Name = "Parent",
Child = new Child()
};
Console.WriteLine(p.Child.Parent.Name);
}
public class Parent
{
public string Name {get; set;}
public Child Child {
get { return this._child; }
set {
this._child = value;
if(value != null)
value.Parent = this;
}
}
private Child _child;
}
public class Child
{
public Parent Parent {get; set;}
}
}
可在此链接中执行