通过ref与val,变量与数组
这个问题在这里已经有了答案:
当引用类型对象通过值传递时,对象的引用实际上是按值传递的,因此如果在方法实现中更新引用到新对象,引用将开始指向新的内存地址。
您可以通过修改一些方法实现来查看结果的差异,以便将即将到来的输入数组初始化为一个新实例,如:
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