在Visual Studio 2017上,使用自动封装字段重构工具时有两个选项:
我已经在基础课上测试了其他选项:
public class Test_EncapsulateFieldRefactoring_Property
{
public int id;
public string name;
}
Run Code Online (Sandbox Code Playgroud)
但是两种选择都给出了相同的结果:
public class Test_EncapsulateFieldRefactoring_Property
{
private int id;
private string name;
public int Id { get => id; set => id = value; }
public string Name { get => name; set => name = value; }
}
Run Code Online (Sandbox Code Playgroud)
为什么存在这些选择?区别在哪里(在生成的代码中,“用法” *)?
用英语来说,这些选项称为:
不同之处在于它对字段用法的作用。第一个选项将更新该字段的所有用法,以使用它创建的新属性。第二个选项不会更改代码中其他位置的字段的现有用法。
因此,如果您在其他地方有此代码:
var test = new Test_EncapsulateFieldRefactoring_Property();
test.name = "Hello";
Run Code Online (Sandbox Code Playgroud)
您会发现第一个选项更新test.name为新test.Name属性,而第二个选项则没有。