blg*_*boy 1 c# arrays primitive
我对此有点困惑,因为我已经读过一个int []数组,虽然int是一个基本类型,因为它是一个数组,它是一个引用类型变量.
那么方法之间有什么不同,例如:
public static void ChangeSomething(ref int[] array)
{
array[0] = 100;
}
Run Code Online (Sandbox Code Playgroud)
和
public static void ChangeSomething(int[] array)
{
array[0] = 100;
}
Run Code Online (Sandbox Code Playgroud)
修改数组后,我可以在索引0处看到这两个调用的新值100.
是否有不同的事情发生在封面下,使一个人比另一个更好?VS IDE是否允许这两者只是因为"ref"关键字可能澄清了意图?
不同之处在于您可以直接在方法中分配原始变量.如果您将方法更改为:
public static void ChangeSomething(ref int[] array)
{
array = new int[2];
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
var myArray = new int[10];
ChangeSomething(ref myArray);
Console.WriteLine(array.Length);
Run Code Online (Sandbox Code Playgroud)
你会看到myArray通话后只有2的长度.没有ref关键字,您只能更改数组的内容,因为数组的引用被复制到方法中.
如果修改数组的项,则没有区别。
但如果你用更大的数组重新定义数组本身,那就有区别了:
public static void ChangeSomething(ref int[] array)
{
array = new int[100]; //you are changing the variable of caller
}
Run Code Online (Sandbox Code Playgroud)
和
public static void ChangeSomething(int[] array)
{
array = new int[100]; //you are changing local copy of array variable, the caller array remains same.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |