关于物业:c#:拥有纯粹的公共财产有什么意义

c#: what is the point in having a purely public property

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicates:
Should I use public properties and private fields or public fields for data?
Property(with no extra processing) vs public field

在一个只获取和设置成员变量的类中拥有一个属性有什么意义?

仅仅公开变量有什么实际区别?


我认为类似的问题在很多情况下都得到了解答,但基本上,它允许您选择在不更改公共接口的情况下向属性添加错误检查/etc验证。

这里还有一些很好的信息,下面的引用可能最能回答您的问题:

A property communicates the idea of"I will make a value available to you, or accept a value from you." It's not an implementation concept, it's an interface concept. A field, on the other hand, communicates the implementation - it says"this type represents a value in this very specific way". There's no encapsulation, it's the bare storage format. This is part of the reason fields aren't part of interfaces - they don't belong there, as they talk about how something is achieved rather than what is achieved.


易于维护…您可以记录分配、添加验证等,而不中断现有的调用者。


不能将数据绑定到公共变量。只有公共财产。


如果您希望更改方法的访问方式,那么只更改属性比浏览所有代码来查找它要容易得多。此外,还可以使属性虚拟化,轻松更改基础数据类型,或者使用Settings变量,以便自动保存和调用它。我自己也有类似的问题。


重点是,类的调用者不知道属性获取/设置的字段,无论是计算字段,还是从某个地方获取字段,或者是处理字段会导致和更新/更改类实例的状态。对于简单的现场调用,这些都不是选项。


属性允许将来扩展访问器和getter(验证、事件等)。

您还可以将属性设置为虚拟的,而字段不能设置为虚拟的。

调用字段的IL与属性的IL不同,因此如果稍后将字段更改为属性,则现有的已编译调用代码将中断。