using System;
namespace lesson8_ref和out
{
class Program
{
#region 学习ref和out的原因
//学习ref和out的原因
//它们可以解决 在函数内部改变外部传入的内容 里面变了 外面也要变
static void ChangeValue(int value)
{
value = 3;
}
static void ChangeArrayValue(int[] arr)
{
arr[0] = 99;
}
static void ChnageArray(int[] arr)
{
//重新申明一个数组
arr = new int[] { 10, 20, 30, 40 };
}
#endregion
#region ref和out的使用
//ref
static void ChangeValueRef(ref int value)
{
value = 3;
}
static void ChangeArrayRef(ref int []arr)
{
arr = new int[] { 100, 200, 300 };
}
//out
static void ChangeValueOut(out int value)
{
value = 4;
}
static void ChangeArrayOut(out int[] arr)
{
arr = new int[] { 999, 200, 300 };
}
#endregion
#region ref和out的区别
//1.ref传入的变量必须初始化,out不用
//2.out传入的变量必须在内部赋值,ref不用
#endregion
static void Main(string[] args)
{
Console.WriteLine("ref和out");
int a = 1;
ChangeValue(a);
Console.WriteLine(a);//1
ChangeValueRef(ref a);
Console.WriteLine(a);//3
ChangeValueOut(out a);
Console.WriteLine(a);//4
Console.WriteLine("**********");
int[] arr2 = { 1, 2, 3, 4 };
ChangeArrayValue(arr2);
Console.WriteLine(arr2[0]);//99
ChnageArray(arr2);
Console.WriteLine(arr2[0]);//99
ChangeArrayRef(ref arr2);
Console.WriteLine(arr2[0]);//100
ChangeArrayOut(out arr2);
Console.WriteLine(arr2[0]);//999
Console.WriteLine("**********");
}
}
}