浅谈C#中参数ref和out
例子如下:我们定义一个a函数传递两个参数x和y里面进行乘法运算,X和Y都进行乘2,因为定义的void没有返回值的函数,所以不会有返回值。
static void a(int x,int y)
{
x=x*2;
y=y*2;
}
现在定义主函数b来调用a函数看然后看下x和y的值会不会改变,
static void b(strubg[] args)
{
int TempNum_1=20;
int TempNum_2=40;
a(TempNum_1,TempNum_2);
Console.WriteLine(TempNum_1);
Console.WriteLine(TempNum_2);
}
这时候我们发现TempNum_1和Temp_2的值没有因为函数a而改变。
但是用ref后值会改变,传入的是数组的时候也会改变,这是为什么呢,因为ref传入的是变量的内存地址,改变后内存地址的值变了,所以他也会变 out也是一样的,
不通的是out可以不管你主函数中定义的值是多少,返回的值是被调函数计算完的,主函数可以不给out参数赋值也可以的。而ref必须赋值。
这就是ref和out的用处和区别
下面是我写的小例子 大家有兴趣的话可以运行下。。。(控制台程序)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int a = 3;
int b = 4;
Console.WriteLine("a:\t"+a+"b:\t"+b);
Bigger(ref a,b);
Console.WriteLine("a:\t" + a + "b:\t" + b);
int[] Newstr = { 1, 2, 3, 4, 5 };
Console.WriteLine("没有调用函数之前各元素值是:");
foreach (int element in Newstr)
{
Console.WriteLine(element);
}
Console.WriteLine("调用函数之后各元素值是:");
ArrayStr(Newstr);
foreach (int element in Newstr)
{
Console.WriteLine(element);
}
Console.ReadKey();
}
static void Bigger(ref int x,int y)
{
x = 2 * x;
y = 2 * y;
}
static void ArrayStr(int[] ArrayString)
{
for (int i=0; i < ArrayString.Length; i++)
{
ArrayString[i] = 2 * ArrayString[i];
}
}
}
}
浙公网安备 33010602011771号