0

我目前正在为我的新工作学习 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 行代码,里面没有什么价值。在我的视觉工作室窗口中,我几乎看不到其中的 3 个。所以我有两个问题:

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

编辑 澄清我的第一个问题:如果我将字段更改为微不足道的属性,我是否有机会破坏客户端代码?

4

2 回答 2

3

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

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

从Vb.Net 团队的这篇博客文章中阅读更多信息,或者从Jon Skeet那里阅读关于 C# 中相同问题的更多信息

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

Public Property GetDescriptionMode As Boolean
于 2012-06-07T10:46:39.000 回答
2

恕我直言,首先设置属性总是值得的:

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

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

Public Property GetDescriptionMode As Boolean
于 2012-06-07T09:42:17.243 回答