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。将字段更改为属性是一个突破性的更改(即,尽管调用代码保持不变,但任何调用代码都需要重新编译)。反射区分字段和属性,因此如果使用反射,可能会出现问题。