簡體   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