1. ref常规用法
正常情况下,一个整型变量,如(int x=5),在通过方法参数调用时,如调用方法M(x,x*2),则会产生2个x的副本,如下所示:
而通过带ref的方法参数调用时,不会产生副本。如果在方法中,修改了ref的参数,那么此改变也会影响到原调用的变量。下面是一个例子:
static void Main(string[] args)
{
int x = 5;
IncreAndDouble(ref x, ref x);
Console.WriteLine(x);
}
private static void IncreAndDouble(ref int x1, ref int x2)
{
x1++;
x2 *= 2;
}
因为都是ref参数,所以x、x1、x2都是指向同一存储空间,输出为 12
2. 局部Ref
在C# 7.0中,ref得到增强,允许定义局部ref变量,用来共享某个已存在变量的空间,如:
int x=10;
ref int y=ref x;
很多类型都能作为ref局部变量的初始化,如数组元素。
一个使用ref局部变量修改数组元素的例子:
var arr = new (int x, int y)[10];//定义10个元组类型的数组
for (int i = 0; i < arr.Length; i++)
{
arr