如何为对象分配父引用

时间:2012-10-01 13:38:43

标签: c# reference

假设我有以下对象:

ZeroObject A = new ZeroObject("A");
ZeroObject B = new ZeroObject("B");
ZeroObject C = new ZeroObject("C");
ZeroObject D = new ZeroObject("D");

当我这样做时:

B = A;

代码中的某处,B应该引用A,对吧?

然后:

C = B;

这意味着CB的引用。有没有办法C A的参考,而不使用:

C = A;

6 个答案:

答案 0 :(得分:1)

首先,我假设ZeroObject是一个班级。如果不是,请忽略这个答案。

  

当我做的时候

B = A;
     

代码中的某个地方,

B should have a reference of A, right?

嗯,这意味着B将具有与A相同的值。 A值的任何进一步更改(例如,使其引用其他对象)都不会对A产生任何影响。但是,如果您更改了AB引用的对象中的数据,您将能够通过引用看到该更改。

阅读my article on reference types and value types了解详情。

  

是否可以在不使用

的情况下为C提供A的引用      

C = A;

     在C#中

你可以用奇怪的方法做到这一点。例如:

public void SetValue<T>(out T target, T value)
{
     target = value;
}

...

SetValue(out C, A);

...但不清楚为什么你希望这样做。

答案 1 :(得分:1)

我不相信发明一些未定义的“ZeroObject”是有帮助的,所以我只是继续使用字符串:

string A = "A";
string B = "B";
string C = "C";

//Values are now A, B, C

B = A;

//Values are now A, A, C

C = B;

//Values are now A, A, A

答案 2 :(得分:0)

这取决于你完全的意思,说“给C引用”。

如果这是“指向相同的内存位置”,那么将它们分配给彼此就足够了。

所以

    B = A;
    C = B

C将指向相同的A内存空间。

但老实说,这是一种非常奇怪的工作方式。只需指定参考C=A

如果这不是您要搜索的内容,请澄清。

答案 3 :(得分:0)

ZeroObject是你自己的一类吗?

以编程方式,这听起来像是你想要一个引用的对象,比如一个子对象(在这种情况下可以调用它)。

因此,理想情况下,您需要ZeroObject类上的另一个属性,类型为ZeroObject - 名为ReferenceObject(或您喜欢的任何内容),您可以在其中分配子对象。

public class ZeroObject
{
    //Properties
    ZeroObject ReferenceObject { get; set; }
}

ZeroObject A = new ZeroObject("A");
ZeroObject B = new ZeroObject("B");

A.ReferenceObject = B;

然后只需B访问A.ReferenceObject

答案 4 :(得分:0)

您的ZeroObject必须具有相应的属性

public class ZeroObject
{
    public ZeroObject (string name)
    {
        Name = name;
    }

    public ZeroObject Parent { get; set }

    public string Name { get; private set; }
}

现在,你可以写

ZeroObject A = new ZeroObject("A");
ZeroObject B = new ZeroObject("B");
ZeroObject C = new ZeroObject("C");
ZeroObject D = new ZeroObject("D");

B.Parent = A;
C.Parent = B;
D.Parent = C;

答案 5 :(得分:0)

如果您想要相同的对象而不引用它,请检查该链接并使用该基本解决方案。

Deep cloning objects