我一直在研究方法,我偶然发现了“ref”方法。然而,这两个代码似乎都完成了同样的事情:
class Program
{
static void Main(string[] args)
{
int number;
number = 5;
Console.WriteLine("Before method number= {0}", number);
AddThree (ref number);
Console.WriteLine("After method number={0}", number);
Console.ReadLine();
}
private static void AddThree(ref int lol) //carbon copy....so int number= 5 here
{
lol = 3;
Console.WriteLine("inside method number={0}", lol);
}
}
}
class Program
{
static void Main(string[] args)
{
int number;
int print;
number = 5;
Console.WriteLine("Before method number= {0}", number);
print =AddThree(number);
Console.WriteLine("After method number={0}", print);
Console.ReadLine();
}
private static int AddThree(int lol) //carbon copy....so int number= 5 here
{
lol = 3;
Console.WriteLine("inside method number={0}", lol);
return lol;
}
}
}
-
ref参数是否有超过返回值的优势?我个人并没有看到一个巨大的差异..
答案 0 :(得分:6)
ref参数是否有超过返回值的优势?我个人并没有看到巨大的差异。
嗯通常是,ref
用于已经返回其他东西的地方 - 例如对于int.TryParse
(使用out
,但相似)。 C#仅支持返回单个值,因此如果您想要一个方法的两个输出,您可以选择:
out
参数ref
参数ValueTuple
)但还有其他差异 - 重要的是,在更改原始变量方面,ref
参数的更改在中立即可见。当你有两个ref
参数别名相同的变量时,这是最简单的证明:
using System;
class Test
{
static void Main()
{
int x = 0;
RefTwo(ref x, ref x);
}
static void RefTwo(ref int a, ref int b)
{
Console.WriteLine(a); // 0
b = 5;
Console.WriteLine(a); // 5!
}
}
哦,有点古怪,如果你想要一个部分方法来回归"一个值,你基本上需要一个ref
参数,因为部分方法必须是void
。
我通常会避免使用ref
参数,除非有明显的好处。在我看来,它们使交互变得更加复杂。