公共财产定义

时间:2010-07-08 04:26:20

标签: c# class variables properties field

为对象定义属性而不是直接访问私有变量有什么好处?

而不是:

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

有什么好处?

2 个答案:

答案 0 :(得分:5)

一个好处是许多框架为了绑定目的而不是字段来查找类的属性。因此,当您想知道为什么框架没有像您期望的那样设置值时,直接暴露_x字段会引起一些令人头疼的问题。

同样由于封装,您可以更改调用代码与字段交互时发生的情况。隐藏属性getter / setter后面的字段允许您执行其他操作,例如在值更改时触发,更新其他内部状态或完全更改实现,因此它只是对子对象的包装调用。

答案 1 :(得分:1)

主要原因是您可以稍后向属性添加行为(日志记录,验证,数据库后端等),而无需更改ABI(应用程序二进制接口)。如果您已将其定义为字段,然后想要添加行为,则需要更改为属性(或方法)。其中任何一个都需要重新编译其他代码(如果你去了方法路线,则需要修改)。