如下Demo:
Code
static void TestOut(out int a,out int b)
{
a = 1;
b = 2;
}
static void TestRef(ref int a,ref int b)
{
a = 33;
b = 44;
}
static void TestNormal(int a,int b)
{
a = 00;
b = 99;
}
//不用第三个参数 交换2个数的值
static void TestChange(ref int a,ref int b)
{
a = a - b;
b = b + a;
a = b - a;
}
static void Main(string[] args)
{
int a=4, b=6;
//TestOut(out a, out b);
//Console.WriteLine("a={0};b={1}", a, b);
//TestRef(ref a,ref b);
//Console.WriteLine("ref a={0};ref b={1}", a, b);
//TestNormal(a,b);
//Console.WriteLine("normal a={0},b={1}", a, b);
TestChange(ref a,ref b);
Console.WriteLine("change a={0},b={1}", a, b);
string m = Console.ReadLine();
while (m != "0")
{
m = Console.ReadLine();
}
}
ref和out实现的效果是相同的,都是将值类型的值改变后可以返回出来。现在也了解了在什么情况下使用ref,什么情况下使用out。那为什么需要有这样的返回存在呢?out和ref用在什么情况下呢?他们为什么会出现呢?
由于一个方法只能返回一个值,不能返回多个,这时候用out ref就可以返回多个。
返回多个值,我们可以用数组(但数组必须是同一类型的值),可以用实体(但有时候不是一个实体),这时我们就用到out和ref了。
例如:调用手机号码归属地webservice时,传入一个phoneNum返回多个数据,本地是没有一个实体类来接受多个数据的,也没有在开始对这些返回值赋值,这是传出的值类型前加out!