C#中ref和out到底有什么用?什么时候会用到呢?我浏览了一些资料但都不是很明白。

2024-12-03 07:21:38
推荐回答(3个)
回答1:

ref表示参数传递时按引用传递。
例如,假如我要交换2个数。
void Swap(int a,int b) { int t=a; a=b; b=t; } 这样并不能完成交换。因为参数传递时默认按值来的。
改成void Swap(ref int a,ref int b) { int t=a; a=b; b=t; } 调用时:int a=3,b=5; Swap(ref a,ref b);
然后a,b的值就被交换了。
out表示参数是传出的。一般是用作函数返回多个值时使用。
例如:Int32的TryParse函数,它用作把一个对象转化为Int32类型。
string s="123"; Int32 a; bool canParse=Int32.TryParse(s,out a);
也就是说TryParse实际有2个返回值,一个在canParse里,是一个bool值,表示是否能够转换。
另一个返回值在a里,如果能转换,a就是转换后的结果。

回答2:

实际应用的时候,ref的对象是值类型。
用ref可以实现两个目的,第一,方法中的值参数是复制的形式带入的。所以如果传入的参数结构很复杂,数据量很大,而且多次调用这个方法,就会导致内存消耗大。此时用ref,传递的只是指针,而不是整个数据,就可以避免这种消耗。第二,如果希望这个值类型在这个方法中的所有修改和赋值都保留,就需要用ref。

out的用法,我经常用在一个方法返回多个类型的数据时。
例如string GetStr(string input, out int i)。这个方法最后返回了一个string,还抛出了一个int的值。

纯个人理解。希望能看懂我的意思。

回答3:

class Program
{
static void Main(string[] args)
{
int testNum = 100;
Operation(testNum);
//屏幕输出100,表示方法Operation内部对testNum的操作没有影响到testNum的值
Console.WriteLine("testNum的值:"+testNum);
int num1=200;
OtherOpearation(ref num1);
//屏幕输出10000,表示方法OtherOpearation内部对num1的操作影响到了num1值。跟引用类型相同
Console.WriteLine("num1的值:"+num1);
int num2;
//自己去测试结果吧,ref和out的区别我认为就是一个需要初始化,一个不需要。类似这两个方法可以使用ref和out修饰参数在void返回类型的情况下得到你想要的返回值
TheOtherOperation(out num2);
Console.WriteLine("num2的值:"+num2);
}
static void TheOtherOperation(out int result)
{
result = 25000;
}
static void OtherOpearation(ref int result)
{
result = 10000;
}
static void Operation(int result)
{
result = 250;
}
}