我有几个继承自基类的类。我们称之为Zoo
。
所有派生类都应该声明一个相同的方法Species
,它返回这种动物园中的物种列表。
继承和MustOverride是我通常会做的事情:
Public Class Species
Public Sub New(name As String)
Me.Name = name
End Sub
Public Property Name() As String
End Class
基类:
Public MustInherit Class Zoo
Public MustOverride Function Species() As List(Of Species)
End Class
派生类:
Public Class WaterZoo
Inherits Zoo
Public Overrides Function Species() As List(Of Species)
Dim list As New List(Of Species)
list.Add(New Species("whale"))
list.Add(New Species("shark"))
list.Add(New Species("dolphin"))
Return list
End Function
End Class
Public Class DesertZoo
Inherits Zoo
Public Overrides Function Species() As List(Of Species)
Dim list As New List(Of Species)
list.Add(New Species("lion"))
list.Add(New Species("giraffe"))
list.Add(New Species("antelope"))
Return list
End Function
End Class
现在,我可以使用这样的类:
Public Class Main
Public Shared Sub Main(args() As String)
Dim zoo1 As New WaterZoo
Dim zoo2 As New DesertZoo
Dim species1 = zoo1.Species()
Dim species2 = zoo2.Species()
Dim allSpecies = species1.Concat(species2)
For Each s In allSpecies
Debug.Print(s.Name)
Next
End Sub
End Class
但我想要实现的目标如下:
Dim species1 = WaterZoo.Species()
Dim species2 = DesertZoo.Species()
我希望共享Species
- 方法(在C#中是静态的),因为实际的类设计要复杂得多,而且我不想仅仅为了获得这个列表而创建一个实例。 / p>
这里的问题是,你不能声明MustOverride Shared
(C#中的虚拟静态)方法,这是有道理的。
但我怎样才能实现我想要做的事情呢?