【发布时间】:2017-12-12 01:43:02
【问题描述】:
我在创建 Vehicle 类的实例时收到 System.StackOverflowException。我相信它正在发生,因为我有一个对继承自 Vehicle 的 Car 类的对象引用,并且它陷入了无限循环。
Public Class Vehicle
Public Car As New Car
End Class
Public Class Car
Inherits Vehicle
Public Sub doStuff()
'does stuff
End Sub
End Class
虽然这可能是不好的做法,但我将其结构如下,因为我需要能够从另一个文件访问 doStuff(),而不必创建 Car 的实例,如下所示:
'some other file
Public Class Foo
Private Vehicle As New Vehicle
Vehicle.Car.doStuff() 'this is what I am trying to accomplish
End Class
我还有其他方法可以做到这一点吗?
编辑:由于似乎有点混乱,我想澄清一下,我有多个继承自 Vehicle 的类(Car、Truck、Bike 等)。所有这些类都有自己独特的方法,但都需要使用 Vehicle 的一些方法和属性。使用virtual 并不是我想要的,因为我不需要覆盖任何方法。
【问题讨论】:
-
Vehicle 不应该实例化汽车类,它应该是相反的方式
-
不知道
doStuff()做了什么,很难说,但是“我需要能够从另一个文件访问doStuff()而不必创建Car的实例”通常是通过将其设为Shared- 即Public Shared Sub doStuff()来解决。然后,您可以直接从Foo中的方法调用它:Car.doStuff()。 -
你不只是'有一个对 Car 类的对象引用`车辆 创建一个 new Car 实例并且 Car 继承自 Vehicle,因此无穷无尽循环:车辆->汽车->车辆...
-
@Plutonix 啊是的,这就是我的意思,抱歉措辞不正确。是否可以使 Car 实例不可继承,以免发生无限循环?还是我需要完全重新考虑我想要构建它的方式?
-
继承不是这样工作的。您不需要 Vehicle 实例,只需要汽车或卡车实例。
Dim c = New Car()然后Car.Park()或Truck.Honk其中 Park 和 Honk 是 Vehicle 方法。由于 Car 继承自 Vehicle,所有基类方法都将可用(直接)
标签: .net vb.net inheritance