Vb.net 替代子对象中的对象定义并在父对象中使用它
我有一个在父类(CoreEngine)中定义的对象(称为Ticker),我试图在父类的一个子类中使用不同的对象定义(但保留相同的名称以在CoreEngine中使用)来覆盖它。我想我应该使用“阴影”定义,但我似乎要将对象设置为null ticker对象是我希望与父类中定义的方法一起使用的对象,但我希望在定义CoreEngine的子对象以使用不同的ticker对象定义时更改其类型Vb.net 替代子对象中的对象定义并在父对象中使用它,vb.net,object,parent,Vb.net,Object,Parent,我有一个在父类(CoreEngine)中定义的对象(称为Ticker),我试图在父类的一个子类中使用不同的对象定义(但保留相同的名称以在CoreEngine中使用)来覆盖它。我想我应该使用“阴影”定义,但我似乎要将对象设置为null ticker对象是我希望与父类中定义的方法一起使用的对象,但我希望在定义CoreEngine的子对象以使用不同的ticker对象定义时更改其类型 Public Class CoreEngine Public WithEvents Ticker As Tic
Public Class CoreEngine
Public WithEvents Ticker As TickerClass
Public Sub New()
End Sub
Public Overridable Sub Activate()
Ticker = New TickerClass()
End Sub
''call methods that use Ticker
End Class
在儿童班:
Public Class ChildEngineClass
Inherits CoreEngine
Public Shadows WithEvents Ticker As BacktestTickerClass ' <<-- this class inherit the TickerClass too
Public Sub New()
End Sub
Public Overrides Sub Activate()
Ticker = New BacktestTickerClass()
End Sub
End Class
Public Class ChildEngineClass
Inherits CoreEngine
Public Sub New()
End Sub
Public Overrides Sub Activate()
Ticker = New BacktestTickerClass()
End Sub
End Class
公共类ChildEngineClass
继承CoreEngine
Public Shadows with events Ticker As BacktestTickerClass'简而言之,您不能更改type类中字段的类型,并且希望父级知道它。父级不知道有关其子级的任何信息,也不知道您更改了类型
由于BacktestTickerClass
继承自TickerClass
,因此您可以不更改Ticker
的定义,而是重写Activate
并将其实例化为子类:
Public Class ChildEngineClass
Inherits CoreEngine
Public Shadows WithEvents Ticker As BacktestTickerClass ' <<-- this class inherit the TickerClass too
Public Sub New()
End Sub
Public Overrides Sub Activate()
Ticker = New BacktestTickerClass()
End Sub
End Class
Public Class ChildEngineClass
Inherits CoreEngine
Public Sub New()
End Sub
Public Overrides Sub Activate()
Ticker = New BacktestTickerClass()
End Sub
End Class
显然,这种方法只能使用父类中可用于TickerClass
的方法。如果您需要使用仅在BacktestTickerClass
中可用的任何内容,则必须在ChildEngineClass
中重写父类中的方法,并在tickers上使用继承
Public Class BaseTicker
'...
End Class
Public Class DerivedTicker1
Inherits BaseTicker
'...
End Class
Public Class DerivedTicker2
Inherits BaseTicker
'...
End Class
现在,您可以使用基本ticker定义ticker并将其指定为派生ticker
Public Class CoreEngine
Public WithEvents Ticker As BaseTicker
Public Sub New()
Ticker = New DerivedTicker1() 'Or possibly New BaseTicker()
End Sub
'...
End Class
Public Class ChildEngineClass
Inherits CoreEngine
'Do not redefine Ticker here.
'Ticker is automatically inherited from the base class.
Public Sub New()
Ticker = New DerivedTicker2()
End Sub
End Class
我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。谢谢。BacktestTickerClass超越了TickerClass的一些方法,这仍然有效吗?另外,如果Ticker最初被引用到TickerClass,那么当它被引用时,我如何替换定义呢?这是因为BacktestTickerCLass是它的子类吗?是的,您可以将变量声明为父类并实例化为子类。但是如果没有强制转换,则只有父类的方法可用。