Honestly, what's the difference between public variable and public property accessor?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicates:
What is the difference between a field and a property in C#
Should I use public properties and private fields or public fields for data?
有什么区别:
1 | public string varA; |
和
1 | public string varA { get; set; } |
公共属性访问器在将来为您提供了更多的灵活性。
如果要添加验证以设置值,只需编写一个非默认的setter。其他代码都不需要修改。
也有可能是您希望用代码替换默认getter的原因。对于一个公共变量来说,这可能是一个真正的痛苦。
除了其他答案外,您还可以使用属性使值为只读或甚至仅设置:
1 | public int Item { get; private set; } // read-only outside the class. Can only be set privately. |
我也遇到过这样的情况:稍后我决定代理一个对象,或者添加AOP,这基本上需要属性。
公共属性通过公开的getter和setter方法访问字段和内部类代码。公共字段直接访问字段。
使用属性提供了提供抽象层和设计层的可能性(使集合访问器受保护的能力,私有)。
当指定了一个属性而没有主体存在时,编译器将创建一个基础私有字段,该字段用于存储值。基本上:
1 2 3 4 5 | private int item = 0; public int Item { get { return item; } set {item = value; } } |
一般来说,我倾向于将属性用于公开的变量,将字段用于私有变量。如果该字段被多次访问,并且速度是一个关键的设计要求,我可能会考虑使用该字段。