【问题标题】:Call baseclass property调用基类属性
【发布时间】:2015-03-30 22:53:08
【问题描述】:

这是一个相当简单的问题,两者都可以。但我只是想知道最佳实践是什么。当子类更改基类中的变量时。它应该调用属性还是只是更改基础变量。

我没有使用该属性来处理数据。子类中的代码是相同的。但是什么被认为是 OOP 方面的最佳实践呢?

示例代码:

Public Class TestDirect
    Protected temp As Integer

End Class

Public Class TestChldDirect
    Inherits TestDirect

    Public Sub New()
        MyBase.temp = 1
    End Sub
End Class

Public Class TestProperty
    Private _temp As Integer
    '
    Public Property temp() As Integer
        Get
            Return Me._temp
        End Get
        Set(ByVal value As Integer)
            Me._temp = value
        End Set
    End Property
End Class

Public Class TestChldProperty
    Inherits TestProperty

    Public Sub New()
        MyBase.temp = 1
    End Sub
End Class

【问题讨论】:

  • 直接设置的公共属性有什么问题?
  • 我倾向于混合使用它们,尽管使用属性确实允许以后灵活使用。
  • 您的灵活度究竟是什么?现在他们在这里,后来他们走了?
  • 好吧,如果您从属性开始,而不是直接编辑。您可以在属性的 set/get 部分调用其他函数。如果您从直接编辑开始,则必须稍后将其转换为属性。工作量不大,但我认为值得考虑
  • 虽然最佳实践肯定会将您指向方法 2(隐藏您的实现等),但还有一个论点是您现在不应该编写代码,因为以后可能需要它。但是有一些细微的区别: 1. 将字段更改为属性是一项重大更改(即,尽管调用代码保持不变,但任何调用代码都需要重新编译 - blogs.msdn.com/b/abhinaba/archive/2006/04/11/572694.aspx) 2. 反射区分字段和属性,因此如果你使用它可能会给你带来问题。

标签: vb.net oop properties


【解决方案1】:

第二种方法在以后为您提供更大的灵活性,并更好地保护/隐藏您的底层实现。例如,在您的示例中,您可能想要修改 temp 的类型,添加一些验证等。这些更改在您的第一个示例中会更加困难,因为您会影响从基类派生的类。在第二个示例中,您可以在不影响任何派生类的情况下进行更改。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 2018-05-12
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    相关资源
    最近更新 更多