繁体   English   中英

当重构为方法时,Visual Studio为什么要在值类型中添加“ ref”?

[英]Why is Visual studio adding “ref” to value types when refactoring into methods?

我不理解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调用并运行Extract Method重构,提取一个名为OneParameter的方法,然后对第二个调用提取一个名为TwoParameters的方法进行相同的OneParameter ,则最终得到以下代码:

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 / etc不会发生这种情况,仅仅是因为框架中存在一个已知为不可变的值类型的硬编码列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM