我们知道,在c#中,当我们在一个方法中想要访问另一个方法中的变量的时候,有两种解决方案---参数和返回值。但当需要返回多个值,并且是不同类型的值的之后应该怎么办呢?解决方案可以是
(1)将所有类型数据转换成字符串类型,到最后再都转换回来,这样就比较麻烦了
(2)利用方法的out参数和ref参数
下面要跟大家介绍的就是第二个简单的方法:方法的out和ref参数
在讲解方法的out和ref参数之前我们先看看最普通的参数传递
static void Main(string[] args)
{
int number1=10;
int number2 = 20;
int sum = AddNumber(number1, number2);
Console.WriteLine(number1); ;
Console.WriteLine(number2);
Console.WriteLine(sum);
Console.ReadKey();
}
public static int AddNumber( int num1, int num2)
{
return num1 + num2;
}
显而易见,此程序的返回值是10,20,30
方法的out参数(与最简单的参数传递差别已用红框标出)
此程序的返回值为10,200,210
概念:out是内部为外部变量赋值,out一般用在函数需要有多个返回值的场所
总结:1.如果方法用参数out修饰了,那么参数在方法外也要用out修饰
2. 如果方法的参数用out修饰了,那么这个参数必须在方法里进行赋值
3.当参数在方法外进行赋值时,参数out把方法里的值传到了方法外,所以最后参数值为在方法里赋的值
例题1:
static void Main(string[] args)
{
int number1=10;
int number2=20;
int sum = AddNumber( number1, out number2);
Console.WriteLine(number1); ;
Console.WriteLine(number2);
Console.WriteLine(sum);
Console.ReadKey();
}
public static int AddNumber(int num1, out int num2)
{
num1 = 100;
num2 = 200;
return num1 + num2;
}
此程序的返回值为什么呢???
开始我理所应当的认为,此程序的返回值为100,200,300,但是大家再仔细看一看,num2没有用out修饰哦,这可是一个大坑哦!
所以,最后的结果是10,200,210
方法的ref参数(与最简单的参数传递差别已用红框标出)
此程序的返回值为10,200,210
很容易可以看出,方法的out和ref只是修改参数,那么他们最后的返回值是相同的
总结:1.如果方法用参数out修饰了,那么参数在方法外也要用out修饰
2.如果方法用参数ref修饰了,那么参数在方法外必须赋初值
那么当这种情况呢?
例题2:
static void Main(string[] args)
{
int number1=10;
int number2=20;
int sum = AddNumber( number1, ref number2);
Console.WriteLine(number1); ;
Console.WriteLine(number2);
Console.WriteLine(sum);
Console.ReadKey();
}
public static int AddNumber(int num1, ref int num2)
{
num1 = 100;
num2 = 200;
return num1 + num2;
}
例题1和例题2,只有num2修饰的差别,例题1用的是out修饰,返回值为10,200,210;
例题2用的是ref修饰,返回值为100,200,300;
由此可以看出参数out和ref修饰的差别:
ref可以把值传到方法里,也可以把值传到方法外
out只可以把值传到方法外
---------------------
作者:Sarah何
来源:CSDN
原文:https://blog.csdn.net/hejingfang123/article/details/78452453
版权声明:本文为博主原创文章,转载请附上博文链接!