c# - 自动封装字段重构, 'Use field' 和 'Use Property' 之间的区别?

标签 c# visual-studio

在 Visual Studio 2017 上,我在使用自动封装字段重构工具时有两个选择:

  1. 使用属性
  2. 仍然使用字段

Screenshot of the menu in French.

我已经在基础类(class)上测试了不同的选项:

public class Test_EncapsulateFieldRefactoring_Property
{
    public int id;
    public string name;
}

但是这两个选项给出了相同的结果:

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; }
}

为什么存在这些选项?区别在哪里(在生成的代码中,“useage”*)?



免责声明:

  • 屏幕截图是关于 French VS 的。所以选项翻译是我做的,真正的选项文本可能会有所不同。
  • 我知道字段和属性之间的区别。我已经检查了很多主题,看看它是否不是一个骗局。我可能会错过一个。
  • *,找不到一个好的翻译:“in the way you use it”。但在这种情况下,不是作为字段和属性之间使用的区别,而是在菜单选项中的区别。

最佳答案

在英文中,选项称为:

  • 封装字段(并使用属性)
  • 封装字段(但仍然使用字段)

区别在于它对字段的用法 做了什么。第一个选项将更新该字段的所有用法以使用它创建的新属性。第二个选项不会更改代码中其他地方的字段的现有用法。

因此,如果您在其他地方有此代码:

var test = new Test_EncapsulateFieldRefactoring_Property();
test.name = "Hello";

您会发现第一个选项将 test.name 更新为新的 test.Name 属性,但第二个选项不会。

关于c# - 自动封装字段重构, 'Use field' 和 'Use Property' 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43756486/

相关文章:

visual-studio - Orchard CMS 中的 razor View 中的智能感知被破坏

javascript - 将 Typescript 添加到现有 asp.net 4 Webforms 项目的推荐方法

c# - 什么是C(COM)中的接口(interface)它和C#中的接口(interface)一样吗

c# - 从结构化数据构建 JSON 层次结构

c# - 在图像上绘制文字

c# - C# 中的三元运算符

javascript - 使用 Chutzpah 时 Typescript 断点失败

.net - VB.NET 2K8 : How to make all imports visible within a class?

c# - Moq 链接表达式导致参数计数不匹配

c# - nHibernate,一个 n 层解决方案 + 征求意见