Vb.net 调用基类属性

Vb.net 调用基类属性,vb.net,oop,properties,Vb.net,Oop,Properties,这是一个相当简单的问题,两者都会起作用。但我只是想知道最好的做法是什么。当子类更改基类中的变量时。它应该调用属性还是仅仅更改基础变量 我没有使用属性来处理数据。子类中的代码是相同的。但是什么才是面向对象的最佳实践呢 示例代码: Public Class TestDirect Protected temp As Integer End Class Public Class TestChldDirect Inherits TestDirect Public Sub Ne

这是一个相当简单的问题,两者都会起作用。但我只是想知道最好的做法是什么。当子类更改基类中的变量时。它应该调用属性还是仅仅更改基础变量

我没有使用属性来处理数据。子类中的代码是相同的。但是什么才是面向对象的最佳实践呢

示例代码:

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

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

您直接设置的公共属性有什么问题?我倾向于混合使用它们,尽管事实上以后使用属性确实允许灵活性。您认为灵活到底是什么?现在它们在这里,以后它们就消失了?如果你从一开始就用属性而不是直接编辑。您可以调用属性的set/get部分中的其他函数。如果从直接编辑开始,以后必须将其转换为属性。虽然没有太多的工作,但值得考虑,我认为虽然最佳实践肯定会将您指向方法2(隐藏您的实现等),但也有一种观点认为您现在不应该编写代码,因为您以后可能需要它。但也有一些微妙的区别:1。将字段更改为属性是一个突破性的更改(即,尽管调用代码保持不变,但任何调用代码都需要重新编译)。反射区分字段和属性,因此如果使用反射,可能会出现问题。