クラスのレイアウトは次のとおりです。
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
であり、そこで処理を行う必要があります。しかし、 orをインスタンス化せずにandの個別のインスタンスを作成できる必要もあります。TestUserB
TestA
TestB
TestA
TestB
TestUserA
TestUserB
私ができるように:
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