人们使用 get 属性的原因是什么?放;而不是字段?

What's the reason for peoples to use properties with get; set; instead of fields?

我经常在 类 中看到属性,而不是字段。看起来像这样:

class TestClass
{
    public ulong Id { get; set; }
    public string Description { get; set; }
}

为什么人们会这样做?他们可以改用字段。我在那里至少看到了 single pro - 我们可以将带有 ref 关键字的字段传递给函数。是否有任何专业人士出于属性或其他原因使用它们像那样

主要原因是封装 - 该值只能 通过相应的属性进行更改,即使您稍后决定 属性 不应该只是 return 一个值。也许您发现当值发生变化时您会想要触发一个事件?如果你有一个 属性,那就很容易了。如果您有 public 字段,则需要进行重大更改。

此外,属性可以是虚拟的或在接口中声明。并且可以将它们声明为只读。

哦,它有助于调试:如果您想知道谁正在(意外地)更改您的值,您可以在“集合”上设置断点。

人们使用属性而不是字段主要是由于编码约定。如果它不执行任何 actual 封装(在 POCO 的情况下),那么 C# 中没有太大区别。大多数时候可以使用字段代替属性,而不会产生任何后果。

// This:
public string MyValue;
// Could be later on changed to this:
public string MyValue { get; set; }
// With no compatibility issues.

虽然推测为什么约定是这样很有趣。在 C# 中,从消费者的角度来看,属性和字段之间的差异大部分是隐藏的。在旧语言中不一定是这种情况。 IE。在 Java 中,您必须显式地编写 getter 和 setter 方法。因此,如果您在 Java 中有一个字段,现在您决定要封装它,那么您将需要检查该字段的所有用法并使用 getters 和 setter相反。如果您使用动态库链接(以前曾是流行的部署方式),这可能是一个更大的问题。因此,从一开始就更容易封装字段,这样以后就不会有向后兼容性问题。当然,这些约定也传播到其他语言。