-1

假设我有以下对象:

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;

这意味着C是的参考B。有没有办法在不使用的情况下提供C参考:A

C = A;
4

6 回答 6

1

首先,我假设ZeroObject是一个类。如果不是,请忽略此答案。

当我做

B = A;

在代码的某处,

B should have a reference of A, right?

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

阅读我关于引用类型和值类型的文章以获取更多信息。

有没有办法在不使用的情况下为 C 提供 A 的参考

C = A;

在 C# 中?

那么有一些奇怪的方法可以做到这一点。例如:

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

...

SetValue(out C, A);

...但目前尚不清楚您为什么要这样做

于 2012-10-01T13:42:25.027 回答
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
于 2012-10-01T13:46:42.657 回答
0

这取决于你的确切意思,说“给 C 参考”。

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

所以

    B = A;
    C = B

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

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

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

于 2012-10-01T13:42:10.097 回答
0

ZeroObject 是你自己的类吗?

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

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

IE

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

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

A.ReferenceObject = B;

然后只需B通过A.ReferenceObject.

于 2012-10-01T13:43:13.283 回答
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;
于 2012-10-01T13:46:20.817 回答
0

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

深度克隆对象

于 2012-10-01T13:46:27.213 回答