【发布时间】:2011-02-23 12:02:02
【问题描述】:
可能的重复:
Should I use public properties and private fields or public fields for data?
Property(with no extra processing) vs public field
在类中拥有一个简单地获取和设置成员变量的属性有什么意义?
将变量公开有什么实际区别?
【问题讨论】:
标签: c# properties oop
可能的重复:
Should I use public properties and private fields or public fields for data?
Property(with no extra processing) vs public field
在类中拥有一个简单地获取和设置成员变量的属性有什么意义?
将变量公开有什么实际区别?
【问题讨论】:
标签: c# properties oop
易于维护...您可以记录分配、添加验证等,而不会破坏现有的调用者。
【讨论】:
我认为类似的问题已经在很多场合得到回答,但基本上它让您可以选择在不更改公共界面的情况下向您的属性添加错误检查/等验证。
还有一些很好的信息here,下面的引用可能最能回答你的问题:
属性传达“我将为您提供价值,或接受您的价值”的理念。这不是一个实现概念,它是一个接口概念。另一方面,字段传达实现 - 它表示“这种类型以这种非常特定的方式表示一个值”。没有封装,它是裸存储格式。这是字段不属于接口的部分原因——它们不属于那里,因为它们谈论的是如何实现某事而不是实现什么。
【讨论】:
您不能将数据绑定到公共变量。仅限公共属性。
【讨论】:
set属性改变对象,对象的Changed事件改变属性。这样,您可以只使用 setter 而不必担心到处更新您的 gui。
属性允许将来扩展访问器和获取器(验证、事件等)。
您也可以将属性设为虚拟,而字段则不能。
调用字段的IL与属性的IL不同,所以如果你稍后将字段更改为属性,现有的编译调用代码将会中断。
【讨论】:
如果您想更改访问方法的方式,只需更改属性就比通过所有代码找到它要容易得多。此外,您可以将属性设为虚拟,轻松更改基础数据类型,或使用Settings 变量以便自动保存和调用它。我自己有一个similar question。
【讨论】:
关键是您的类的调用者不知道属性获取/设置的字段,无论是计算的,从某处获取的,还是弄乱它会导致更新/更改类实例的状态。使用简单的字段调用,这些都不是一个选项。
【讨论】: