通过ref与val,变量与数组

这个问题在这里已经有了答案:

  • 在C#7答案中通过引用或值传递对象

  • 当引用类型对象通过值传递时,对象的引用实际上是按值传递的,因此如果在方法实现中更新引用到新对象,引用将开始指向新的内存地址。

    您可以通过修改一些方法实现来查看结果的差异,以便将即将到来的输入数组初始化为一个新实例,如:

    static void method1(int[] z)
    {
       z = new int[3]; // new instance created and z has reference to it
                       // while calling side still refers to old memory location
                       // which is { 13, 1, 5 }
       for(int m=0; m<z.Length;m++)
       {
            z[m] *= 2;
        }
    }
    

    现在,当您调用按值传递方法时,它将仅在本地修改此方法的z值,并且外部数组不会受到影响,而如果通过引用传递它,那么这两个数组都会受到更改的影响。

    发生的是我们通过创建一个新的数组实例将数组z设置为引用新的内存位置,因此方法中的引用更新为指向新的内存位置,但调用方引用仍指向旧数组在调用方法之前被实例化。

    当通过引用传递时,两个变量都会更新以指向新的内存位置。

    static void method1(ref int[] z)
    {
       z = new int[3]; // new instance created and z has reference to it
                       // now calling side also refers to new memory location
                       // which is new int[3];
       for(int m=0; m<z.Length;m++)
       {
            z[m] *= 2;
        }
    }
    
    链接地址: http://www.djcxy.com/p/21015.html

    上一篇: by ref vs. by val, variable vs. array

    下一篇: C# array parameter reference