将字段重构为属性

时间:2012-06-07 09:32:44

标签: vb.net properties encapsulation

我目前正在为我的新工作学习vb.net,而且我对公共领域的感情很复杂。我看到很多关于它们的论点都在破坏封装。在python中,通常的做法是保持简单并在它们足够时使用字段。如果我们想稍后添加逻辑,我们只需将它们重构为属性,而不会破坏客户端代码的任何内容。

在我正在使用的代码库中,我看到包含十几个属性的大型类,如:

Private __GetDescriptionMode As Boolean
<DefaultValue(False)> _
 Public Property GetDescriptionMode() As Boolean
    Get
        GetDescriptionMode = __GetDescriptionMode
    End Get
    Set(ByVal Value As Boolean)
        __GetDescriptionMode = Value
    End Set
End Property

这10行代码内部价值不大。在我的视觉工作室窗口中,我几乎看不到其中的三个。所以我有两个问题:

  • 是否有正当理由不简单地定义字段并在需要时将它们重构为属性?
  • OOP原则是否如此重要以至于牺牲了如此多的可读性? (我可以看看更少的东西,我必须解析财产,以确保他们没有做任何特别的事情,等等)

修改 澄清我的第一个问题:如果我将字段更改为一个简单的属性,我是否有机会破坏客户端代码?

2 个答案:

答案 0 :(得分:3)

创建属性而不是字段是个好主意。

  • 如果将公共字段更改为公共属性,则可以中断客户端代码。
  • 您只能使用与属性绑定数据。
  • 字段不能在接口中使用
  • 如果将公共字段更改为公共属性,则会破坏二进制序列化代码。
  • 如果您正在使用反射,稍后将字段更改为属性可能会破坏您的反射代码。

Vb.Net小组从此blog post了解更多内容,或者从Jon Skeet了解有关C#中相同问题的内容

在Visual Basic 2010及更高版本中,使用自动属性

Public Property GetDescriptionMode As Boolean

答案 1 :(得分:2)

恕我直言,它始终值得设置属性:

  • 当他们需要这些属性时,你很可能会让别人的生活更加艰难。
  • 也可能意味着对具有许多依赖关系的项目进行不必要的修改。
  • 如果您不喜欢属性占用的空间,请在Region
  • 中换行
  • 各种事物,如反射/数据绑定等可能会出现字段问题。

值得一提的是,从VS2010开始,这个问题在很大程度上随着自动属性的出现而消失。以上内容将浓缩为:

Public Property GetDescriptionMode As Boolean