为对象定义属性而不是直接访问私有变量有什么好处?
而不是:
public class A
private _x as integer = 0
Public property X() as integer
Get
return _x
End Get
Set(ByVal value As integer)
_x = value
End Set
End Property
end class
为什么我们不能这样做:
public class A
public _x as integer = 0
end class
有什么好处?
答案 0 :(得分:5)
一个好处是许多框架为了绑定目的而不是字段来查找类的属性。因此,当您想知道为什么框架没有像您期望的那样设置值时,直接暴露_x
字段会引起一些令人头疼的问题。
同样由于封装,您可以更改调用代码与字段交互时发生的情况。隐藏属性getter / setter后面的字段允许您执行其他操作,例如在值更改时触发,更新其他内部状态或完全更改实现,因此它只是对子对象的包装调用。
答案 1 :(得分:1)
主要原因是您可以稍后向属性添加行为(日志记录,验证,数据库后端等),而无需更改ABI(应用程序二进制接口)。如果您已将其定义为字段,然后想要添加行为,则需要更改为属性(或方法)。其中任何一个都需要重新编译其他代码(如果你去了方法路线,则需要修改)。