VB.NET - 在 child class 中扩展 属性
VB.NET - Extend property in child class
也许有人可以帮助我,我可以想象这是一个普遍的需求:
我有一个基地和一个 child class。基础 class 有一个名为 "hello" 的 属性。现在我需要在 child 的 属性 集中添加扩展功能 - 如何实现?
进一步解释的代码示例:
基础Class:
Public MustInherit Class Base
Private pHello as String = ""
Public Property Hello As String
Get
Return pHello
End Get
Set(ByVal value As String)
pHello = value
'DoSomethingInBaseClass()
MsgBox "BaseClass calling!" 'Just for testing
End Set
End Property
End Class
Child Class
Public Class Child
Inherits Base
Public Property Hello As String
Get
Return MyBase.Hello
End Get
Set(ByVal value As String)
'DoSomethingInCHILDClass()
MsgBox "ChildClass calling!" 'Just for testing
End Set
End Property
End Class
属性 设置在 Main
Public Class Main
Public Sub DoIt()
Dim InstChild as new Child
InstChild.Hello = "test"
End Sub
End Class
基本上我想要的是,当设置 属性 时,我首先得到 Child MessageBox,然后是 Base MessageBox。
当然,我需要在 属性 定义中添加关键字。
我玩过 Shadows 和 Overrides,但我要么只得到 Child,要么只得到基本消息。
有没有办法同时获得两者?
非常感谢!
问题出在childclass。而不是 returning myBase.hello
只是 return Me.hello
。
因为起初 child class 的 me.hello
将等于 base class
的 hello
。因此,当您覆盖 属性 时,在 class 基础上它将保持不变,并且只会在 child class.
上发生变化,因此为了让你们俩都应该打电话:Base.Hello.get()
和 Child.Hello.get()
我建议在可重写的函数中完成这项工作。这样你就可以让 child class 完成它的工作然后调用 MyBase.overriddenFunction().
例如:
基础Class
Public MustInherit Class Base
Private pHello as String = ""
Public Property Hello As String
Get
Return pHello
End Get
Set(ByVal value As String)
pHello = value
doSomething()
MsgBox "BaseClass calling!" 'Just for testing
End Set
End Property
Private Overridable Sub doSomething()
'Do base class stuff
End Sub
End Class
Child Class
Public Class Child
Inherits Base
Public Property Hello As String
Get
Return MyBase.Hello
End Get
Set(ByVal value As String)
doSomething()
MsgBox "ChildClass calling!" 'Just for testing
End Set
End Property
Private Overrides Sub doSomething()
'Do child class stuff
MyBase.doSomething()
End Sub
End Class
也许有人可以帮助我,我可以想象这是一个普遍的需求: 我有一个基地和一个 child class。基础 class 有一个名为 "hello" 的 属性。现在我需要在 child 的 属性 集中添加扩展功能 - 如何实现?
进一步解释的代码示例:
基础Class:
Public MustInherit Class Base
Private pHello as String = ""
Public Property Hello As String
Get
Return pHello
End Get
Set(ByVal value As String)
pHello = value
'DoSomethingInBaseClass()
MsgBox "BaseClass calling!" 'Just for testing
End Set
End Property
End Class
Child Class
Public Class Child
Inherits Base
Public Property Hello As String
Get
Return MyBase.Hello
End Get
Set(ByVal value As String)
'DoSomethingInCHILDClass()
MsgBox "ChildClass calling!" 'Just for testing
End Set
End Property
End Class
属性 设置在 Main
Public Class Main
Public Sub DoIt()
Dim InstChild as new Child
InstChild.Hello = "test"
End Sub
End Class
基本上我想要的是,当设置 属性 时,我首先得到 Child MessageBox,然后是 Base MessageBox。
当然,我需要在 属性 定义中添加关键字。 我玩过 Shadows 和 Overrides,但我要么只得到 Child,要么只得到基本消息。
有没有办法同时获得两者?
非常感谢!
问题出在childclass。而不是 returning myBase.hello
只是 return Me.hello
。
因为起初 child class 的 me.hello
将等于 base class
的 hello
。因此,当您覆盖 属性 时,在 class 基础上它将保持不变,并且只会在 child class.
上发生变化,因此为了让你们俩都应该打电话:Base.Hello.get()
和 Child.Hello.get()
我建议在可重写的函数中完成这项工作。这样你就可以让 child class 完成它的工作然后调用 MyBase.overriddenFunction().
例如:
基础Class
Public MustInherit Class Base
Private pHello as String = ""
Public Property Hello As String
Get
Return pHello
End Get
Set(ByVal value As String)
pHello = value
doSomething()
MsgBox "BaseClass calling!" 'Just for testing
End Set
End Property
Private Overridable Sub doSomething()
'Do base class stuff
End Sub
End Class
Child Class
Public Class Child
Inherits Base
Public Property Hello As String
Get
Return MyBase.Hello
End Get
Set(ByVal value As String)
doSomething()
MsgBox "ChildClass calling!" 'Just for testing
End Set
End Property
Private Overrides Sub doSomething()
'Do child class stuff
MyBase.doSomething()
End Sub
End Class