C#2变量指向同一个对象

时间:2014-06-17 04:57:54

标签: c# reference unity3d

在我的项目中,我有一个非常简单的任务。

Vector3 v1 = new Vector3(0,0,0);
Vector3 v2 = v1;
v2.x = 10;
Debug.Log(v1);

以上代码打印"0,0,0"。如果这是Java,则会打印"10,0,0",因为v2会引用v1。我如何在C#中获得这个?

我希望v1和v2指向同一个对象。这也是团结项目的一部分,但我认为这不相关吗?

2 个答案:

答案 0 :(得分:2)

在Unity3d中,Vector3不是引用类型(类)。它是一个值类型(struct)。这意味着它在这个意义上的行为 更像是Java中的原语。

分配时,您正在复制,而不是引用同一个对象。

可以做的是使用ref关键字调用方法,并允许 修改现有的Vector3

private static void Vector3Test()
{
    Vector3 v1 = new Vector3(0, 0, 0);

    ChangeVector(ref v1);

    Debug.Log(v1);
}

private static void ChangeVector(ref Vector3 vector)
{
    vector.x = 10;
}

这将按预期输出"10,0,0"

答案 1 :(得分:1)

这是因为 Vector3 Structure 类型而不是 Class 类型。它是一个值类型,而不是类,如Class。因此,当您指定它时,它将复制一个新值,但它们在内存中的地址不相同。