我正在努力如何在真正的应用程序中使用"ref"(通过引用传递参数).我想有一个简单而有意义的例子.到目前为止我发现的所有内容都可以通过向方法添加返回类型来轻松重做.有人在想吗?谢谢!
dig*_*All 21
我想到的最好的例子是交换两个变量值的函数:
static void Swap<T>(ref T el1, ref T el2)
{
var mem = el1;
el1 = el2;
el2 = mem;
}
Run Code Online (Sandbox Code Playgroud)
用法:
static void Main(string[] args)
{
string a = "Hello";
string b = "Hi";
Swap(ref a, ref b);
// now a = "Hi" b = "Hello"
// it works also with array values:
int[] arr = new[] { 1, 2, 3 };
Swap(ref arr[0], ref arr[2]);
// now arr = {3,2,1}
}
Run Code Online (Sandbox Code Playgroud)
没有ref关键字就无法完成这样的功能.
一个可能的角落案例:Interlocked.Increment.如果不通过引用传递变量,则无法以原子方式执行增量.
我不能说我用ref很自己,说实话-我通常避开需要返回多个值,而且当时out是通常就足够了.我见过的 很多情况ref都是由于作者不了解参数类型中.NET如何传递参数.