【发布时间】:2023-04-03 05:30:01
【问题描述】:
这是类的布局:
Public MustInherit Class AbstractBase
Public MustOverride Function GetTest() As String
Public Sub PrintTest()
System.Console.WriteLine(Me.GetTest())
End Sub
End Class
Public Class TestA
Inherits AbstractBase
Public Overrides Function GetTest() As String
Return "Hello from A"
End Function
End Class
Public Class TestB
Inherits AbstractBase
Public Overrides Function GetTest() As String
Return "Hello from B"
End Function
End Class
Public Class TestUser(Of T As AbstractBase)
Public Sub Print()
Dim x As AbstractBase = Activator.CreateInstance(Of T)()
x.PrintTest()
End Sub
End Class
Public Class TestUserA
Inherits TestUser(Of TestA)
''' Custom TestUserA code
End Class
Public Class TestUserB
Inherits TestUser(of TestB)
''' Custom TestUserB Stuff
End Class
这是问题区域:
Dim a As TestUser(Of AbstractBase) = New TestUserA()
编译器说它们 TestUserA 不能转换为 TestUser(Of AbstractBase)。我不知道为什么,因为TestUserA 继承自TestUser(Of TestA) 而TestA 继承自AbstractBase。对我来说,这个继承结构看起来是正确的,所以我不确定为什么这不起作用?
这个想法是AbstractBase 实现了我需要的一些通用功能。 TestUserA 和 TestUserB 需要 TestA 和 TestB 进行处理。但我还需要能够在不实例化TestUserA 或TestUserB 的情况下创建TestA 和TestB 的单独实例。
所以我可以这样做:
Dim a As TestUser(Of AbstractBase) = New TestUserA()
a.Print()
Dim aTest As New TestA()
Dim x = aTest.GetTest()
Public Function DoThings() As TestUser(Of AbstractBase)
Dim a As TestUser(Of AbstractBase) = New TestUserA()
return a
End Function
【问题讨论】:
-
有人能解释一下为什么这个继承结构不起作用吗?我不确定我错过了什么。
标签: c# .net vb.net inheritance abstract-class