1

クラスのレイアウトは次のとおりです。

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の個別のインスタンスを作成できる必要もあります。TestUserBTestATestBTestATestBTestUserATestUserB

私ができるように:

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
4

3 に答える 3

0

次のように、Dimなしで使用します。As

Dim a = New TestUserA()
a.DoOtherStuff()

Option Strict Off注:上記を機能させるには、を使用する必要があります。Option Infer Onを使用して、上記の構文を支援することもできます。

于 2013-09-06T14:32:04.680 に答える