即使未传递引用 C#,数组的值也会更改
Values of Array are changed even though not passed a reference C#
所以在下面的代码中,它是一个生成立方体面的简单脚本,我很好奇(并且只能在这里找到 C++ 示例)为什么 CreateTriangles 中的 int[] 三角形能够被分配给来自 SetQuad 的内部,即使我没有将它作为参考传递。我是 C# 的新手,如果这是一个愚蠢的问题,请原谅我,但从我在 MSDN 上阅读的关于 refs 的内容来看,我显然不明白。
我本以为要获得这种效果,您需要使用 "ref int[] ..."
private static int SetQuad (int[] triangles, int i, int v00, int v10, int v01, int v11){
triangles [i] = v00;
triangles [i + 1] = triangles [i + 4] = v01;
triangles [i + 2] = triangles [i + 3] = v10;
triangles [i + 5] = v11;
return i + 6;
}
private void CreateTriangles () {
int quads = (xSize * ySize + xSize * zSize + ySize * zSize) * 2;
int[] triangles = new int[quads * 6];
int ring = (xSize + zSize) * 2;
int t = 0, v = 0;
for (int y = 0; y < ySize; y++, v++) {
for (int q = 0; q < ring - 1; q++, v++) {
t = SetQuad (triangles, t, v, v + 1, v + ring, v + ring + 1);
}
t = SetQuad (triangles, t, v, v - ring + 1, v + ring, v + 1);
}
t = CreateTopFace (triangles, t, ring);
mesh.triangles = triangles;
}
如果要将 triangles
变量分配给其他数组 并将该分配传播给调用者 ,则只需要通过 ref
.
这就是 ref
所做的,它允许分配传播。因为 Array<int>
是一个引用类型,你已经在传递一个引用(by value)所以调用者会自动 "picked up" 修改对象的状态,因为它们都指向同一个对象。
所以在下面的代码中,它是一个生成立方体面的简单脚本,我很好奇(并且只能在这里找到 C++ 示例)为什么 CreateTriangles 中的 int[] 三角形能够被分配给来自 SetQuad 的内部,即使我没有将它作为参考传递。我是 C# 的新手,如果这是一个愚蠢的问题,请原谅我,但从我在 MSDN 上阅读的关于 refs 的内容来看,我显然不明白。 我本以为要获得这种效果,您需要使用 "ref int[] ..."
private static int SetQuad (int[] triangles, int i, int v00, int v10, int v01, int v11){
triangles [i] = v00;
triangles [i + 1] = triangles [i + 4] = v01;
triangles [i + 2] = triangles [i + 3] = v10;
triangles [i + 5] = v11;
return i + 6;
}
private void CreateTriangles () {
int quads = (xSize * ySize + xSize * zSize + ySize * zSize) * 2;
int[] triangles = new int[quads * 6];
int ring = (xSize + zSize) * 2;
int t = 0, v = 0;
for (int y = 0; y < ySize; y++, v++) {
for (int q = 0; q < ring - 1; q++, v++) {
t = SetQuad (triangles, t, v, v + 1, v + ring, v + ring + 1);
}
t = SetQuad (triangles, t, v, v - ring + 1, v + ring, v + 1);
}
t = CreateTopFace (triangles, t, ring);
mesh.triangles = triangles;
}
如果要将 triangles
变量分配给其他数组 并将该分配传播给调用者 ,则只需要通过 ref
.
这就是 ref
所做的,它允许分配传播。因为 Array<int>
是一个引用类型,你已经在传递一个引用(by value)所以调用者会自动 "picked up" 修改对象的状态,因为它们都指向同一个对象。