繁体   English   中英

人们使用 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关键字的字段传递给函数。 是否有任何专业人士出于财产或其他原因使用它们

主要原因是封装 - 值只能通过相应的属性进行更改,即使您后来决定该属性不应该只返回一个值,情况仍然如此。 也许您发现当值发生变化时您会想要触发一个事件? 如果你有财产,那很容易。 如果您有公共领域,则需要进行重大更改。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM