out关键字的使用方式与ref关键字相同(在函数定义和函数调用中用作参数的修饰符),实际上,它的执行方式与引用参数完全一样,因为在函数执行完毕后,该参数的值将返回给函数调用中使用的变量,但是,还是有一些重要的区别:
- 把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数。
- 另外,在函数使用out参数时,该参数必须看做是还未赋值。即调用代码可以把已赋值的变量用作out参数,存储在该变量中的值会在函数执行时丢失。
ref
static void Main(string[] args)
{
//ref必须要给这个变量赋初值,和out有区别,out可以把方法里的值传出去,
//ref 可以把值传到方法里,也可以把值传到方法外
int number1 = 10;
int number2 = 20;
int sum = Show(ref number1, ref number2);
Console.WriteLine("{0},{1},{2}", number1, number2, sum);
Console.ReadKey();
}
public static int Show(ref int num1,ref int num2)
{
//num1 = 100;
//num2 = 200;
return num1 + num2;
}
输出:10,20,30
static void Main(string[] args)
{
//ref必须要给这个变量赋初值,和out有区别,out可以把方法里的值传出去,
//ref 可以把值传到方法里,也可以把值传到方法外
int number1 = 10;
int number2 = 20;
int sum = Show(ref number1, ref number2);
Console.WriteLine("{0},{1},{2}", number1, number2, sum);
Console.ReadKey();
}
public static int Show(ref int num1,ref int num2)
{
num1 = 100;
num2 = 200;
return num1 + num2;
}
输出:100,200,300
out
static void Main(string[] args)
{
//如果方法的参数用out修饰,那么这个参数必须在方法里进行赋值
int number1;
int number2;
int sum = AddNumber(out number1, out number2);
Console.WriteLine(number1);
Console.WriteLine(number2);
Console.WriteLine(sum);
Console.ReadKey();
}
public static int AddNumber(out int num1, out int num2)
{
num1 = 100;
num2 = 200;
return num1 + num2;
}
输出:100,200,300
static void Main(string[] args)
{
//如果方法的参数用out修饰,那么这个参数必须在方法里进行赋值
int number1 = 10;//不一定要赋值
int number2 = 20;//不一定要赋值
int sum = AddNumber(out number1, out number2);
Console.WriteLine(number1);
Console.WriteLine(number2);
Console.WriteLine(sum);
Console.ReadKey();
}
public static int AddNumber(out int num1, out int num2)
{
num1 = 100;//必须赋值
num2 = 200;//必须赋值
return num1 + num2;
}
输出:100,200,300
【传多个返回值的方法】
static void Main(string[] args)
{
//ref必须要给这个变量赋初值,和out有区别,out可以把方法里的值传出去,
//ref 可以把值传到方法里,也可以把值传到方法外
int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int max;
int min;
int sum=ArraySum(nums,out max,out min);
Console.WriteLine("{0},{1},{2}",max,min,sum);
Console.ReadKey();
}
public static int ArraySum(int[] numbers,out int max,out int min)
{
max = int.MinValue;
min = int.MaxValue;
int sum = 0;
for (int i = 0; i < numbers.Length ; i++)
{
if (numbers[i]>max)
{
max = numbers[i];
}
if (numbers[i]<min)
{
min = numbers[i];
}
sum += numbers[i];
}
return sum;
}
输出:9,1,45