学习ref和out的原因
它们可以解决在函数内部改变外部传入的内容,里面变了,外面也要改变。
static void ChangeValue(int value)
{
value = 3;
}
static void ChangeArrayValue(int[] arr)
{
arr[0] = 99;
}
static void ChangeArray(int[] arr)
{
//重新声明了一个数组
arr = new int[] { 10, 20, 30 };
}
int a = 1;
ChangeValue(a);
Console.WriteLine(a);
int[] arr2 = { 1, 2, 3 };
ChangeArrayValue(arr2);
Console.WriteLine(arr2[0]);
ChangeArray(arr2);
Console.WriteLine(arr2[0]);
ref和out的使用
函数参数的修饰符
当传入的值类型参数在内部修改时,或者引用类型参数在内部重新声明时,外部的值会发生变化。
static void ChangeValueRef(ref int value)
{
value = 3;
}
static void ChangeArrayRef(ref int[] arr)
{
arr = new int[] { 10, 20, 30 };
}
ChangeValueRef(ref a);
Console.WriteLine(a);
ChangeArrayRef(ref arr2);
Console.WriteLine(arr2[0]);
//out
static void ChangeValueOut(out int value)
{
value= 99;
}
static void ChangeArrayOut(out int[] arr)
{
arr = new int[] { 999, 88, 7 };
}
ChangeValueOut(out a);
Console.WriteLine(a);
ChangeArrayOut(out arr2);
Console.WriteLine(arr2[0]);
ref和out的区别
1.ref传入的变量必须初始化,out不用。
2.out传入的变量必须在内部赋值,ref不用。
3.ref传入的变量必须初始化,但是在内部可改可不改。
4.out传入的变量不用初始化,但是在内部必须修改该值(必须赋值)
小结:
1.ref和out的作用:解决值类型和引用类型,在函数内部改值或者重新声明能够影响外部传入的变量,让其也被修改。
2.使用上:就是在声明参数的时候,前面加上ref和out的关键字即可,使用时同上。
3.区别:
ref传入的变量必须初始化,但是在内部可改可不改。
out传入的变量不用初始化,但是在内部必须修改该值(必须赋值)