为什么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?

为什么Visual studio在重构方法时向值类型添加“ref”

如果结构可变且可修改,则返回和两个引用都会发生。 VS 2013并没有真正对结构类型的不可变性或所选代码进行任何分析。 对于原语/Guid/等,它不会发生,因为框架中存在已知不可变的值类型的硬编码列表。