为什么Visual studio在重构方法时向值类型添加“ref”
本文关键字:类型 添加 ref studio Visual 重构 方法 为什么 | 更新日期: 2023-09-27 18:37:05
我不明白Visual Studio Express 2013在运行"提取方法"重构时做出的决定。请考虑以下代码:
public struct Foo
{
private readonly int x, y;
public int X { get { return x; } }
public int Y { get { return y; } }
public Foo(int x, int y)
{
this.x = x;
this.y = y;
}
}
class Test
{
static void Main()
{
Foo a = new Foo(1, 2);
Foo b = new Foo(3, 4);
Console.WriteLine(a);
Console.WriteLine(a + "" + b);
}
}
如果我突出显示第一个Console.WriteLine
调用并运行提取方法重构,提取一个名为 OneParameter
的方法,然后对第二次调用提取一个名为 TwoParameters
的方法执行相同的操作,我最终得到以下代码:
class Test
{
static void Main()
{
Foo a = new Foo(1, 2);
Foo b = new Foo(3, 4);
OneParameter(a);
TwoParameters(ref a, ref b);
}
static Foo OneParameter(Foo a)
{
Console.WriteLine(a);
return a;
}
static void TwoParameters(ref Foo a, ref Foo b)
{
Console.WriteLine(a + "" + b);
}
}
为什么双参数方法有ref
参数,而单参数方法没有?在这里使用ref
有什么意义?
另外,为什么单参数方法返回 Foo?
如果结构可变且可修改,则返回和两个引用都会发生。 VS 2013并没有真正对结构类型的不可变性或所选代码进行任何分析。 对于原语/Guid/等,它不会发生,因为框架中存在已知不可变的值类型的硬编码列表。