即使未传递引用 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" 修改对象的状态,因为它们都指向同一个对象。