为什么go1没有价值

时间:2018-06-13 17:24:56

标签: c# unity3d

public GameObject go1; // null
public GameObject go2; // null
public GameObject goTarget; // has value

void B1()
{
    C1(go1);
}
void C1(GameObject g)
{
    g = goTarget;
    // go1 is null
}

void B2()
{
    C2(out go2);
}
void C2(out GameObject g)
{
    g = goTarget;
    // go2 has value
}

go1是一个引用类型,为什么go1仍然用来传递。 在找到许多信息之后,我仍然无法理解为什么。

1 个答案:

答案 0 :(得分:0)

它没有任何价值,因为你永远不会给它分配一个。有两种方法可以为字段分配值:

  • 指定字段(go1 = ...
  • 引用传递到某处的字段,然后分配给引用Foo(ref go1)Foo(out go1),并分配给{{1 {} {}}内的参数

你不能做其中任何一个。当您致电ref时,您正在复制FooC1(go1);)的当前值,并传递 。你没有通过对该领域的引用。

go1是引用类型的事实实际上与此完全无关。这是因为"传递价值" vs"通过引用",完全不相关引用"引用类型" vs" value-type"尽管名字听起来很相似。