ref
using System;
namespace CSharplearn
{
class Program
{
static void Main(string[] args)
{
int a = 1;
int b = AddNum(a);
Console.WriteLine(b);
}
public static int AddNum(int a)
{
a++;
return a;
}
}
}
结果:
以上代码用了一个方法来自增传递过来的参数.但是如果我用ref,就可以少些几行代码并使思路更清晰.
using System;
namespace CSharplearn
{
class Program
{
static void Main(string[] args)
{
int a = 1;
AddNum(ref a);
Console.WriteLine(a);
}
public static void AddNum(ref int a)
{
a++;
}
}
}
这串代码和上面一串有着同样的效果,只不过多加了ref.ref可以看作为一个连接器,使Main()方法里定义的a和AddNum的参数a连接在了一起.AddNum()方法修改了a自然也就修改了Main()里的a.(Main()里的变量a可以是其他名字,同理AddNum()的参数也是.)
要注意的是,在使用ref之前变量里必须有值.
out
using System;
namespace CSharplearn
{
class Program
{
static void Main(string[] args)
{
int b;
AddNum(out b);
Console.WriteLine(b);
}
public static void AddNum(out int a)
{
a = 1;
a++;
}
}
}
结果:
out的功能与ref基本相似,不同的是,使用out的变量不必再一开始就有赋值,但需要在后面的代码有赋值.例如这串代码里a的赋值在AddNum()里完成了.
out也可以用于让一个方法做到返回两个值,一个从return返回一个从out那里返回.但要这么做还是推荐用其他方式完成.