【问题标题】:Public Property Definition公共财产定义
【发布时间】:2011-03-13 03:43:14
【问题描述】:

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

代替:

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

有什么好处?

【问题讨论】:

标签: c# class variables properties field


【解决方案1】:

一个好处是许多框架寻找类的属性来进行绑定,而不是字段。因此,当您想知道为什么框架没有按照您的预期设置值时,直接公开 _x 字段会引起一些麻烦。

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

【讨论】:

  • +1 这是 VB6 可以说比 .Net 更好的地方之一。在 VB6 中,直接公开的字段的行为与属性完全相同。如果您稍后需要添加行为,您可以将您的字段更改为属性,并且不会中断。字段和属性之间的这种差异是我们拥有笨重的自动实现属性的原因。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2020-12-17
    • 1970-01-01
    • 2011-12-21
    • 2016-02-13
    • 2018-05-18
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多