[英]Unexpected Refactoring when adding service reference in Visual Studio 2012 for Windows Desktop
[英]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.