C#数组参数引用
这个问题在这里已经有了答案:
所述阵列由引用传递,则可以通过执行看到这个A[0] = 7;
从另一种方法。
然而,该引用(由外部变量A
)是按值传递给该函数的。 该引用被复制并创建一个新变量并传递给该函数。 函数外部的变量不受函数内部参数变量A
的重新分配的影响。
要更新原始变量,需要使用ref
关键字,以便函数内部的参数表示与函数外部相同的对象。
int[] A = new int[] {1, 2, 3};
fun2(A);
// A at this point says 7, 2, 3.
fun(ref A);
// A at this point says 4, 5, 6.
void fun2(int[] a)
{
a[0] = 7;
}
void fun(ref int[] a)
{
int[] B = new int[] {4, 5, 6};
a = B;
}
我认为所有数组都通过引用在C#中传递
实际上( 原始数组对象的引用是通过值传递的 ),这是C#中引用类型的常见行为。
你的理解是部分正确的,引用被传递,但是通过值传递,这意味着创建了一个指向原始数组对象A
的新引用。
fun(int[] A)
有它自己的引用副本,它指向包含1,2,3的数组对象,并在fun
创建一个新的数组对象B
并且您只是将新对象的引用赋值给你当地的方法引用变量当然不会对作为输入传递给fun
的原始A
对象产生任何影响。
如果您想反映对A
fun
的更改以反映回原始数组对象,则需要通过引用传递它。
您可以更新数组项目而无需通过引用,这在Scott Chamberlain的答案中有很好的解释
希望能帮助到你!
链接地址: http://www.djcxy.com/p/21013.html上一篇: C# array parameter reference
下一篇: Why string value remains unchanged after calling function