Here's the layout of classes:

```
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

```

This is the problem area:

```
Dim a As TestUser(Of AbstractBase) = New TestUserA()

```

The compiler says they `TestUserA` can't be cast to `TestUser(Of AbstractBase)`. I'm not sure why though because `TestUserA` inherites from `TestUser(Of TestA)` and `TestA` inherits from `AbstractBase`. To me this inheritence structure looks correct so I'm not sure why this wouldn't work?

The idea is that `AbstractBase` implements some general functionality I need. `TestUserA` and `TestUserB` need `TestA` and `TestB` to do there processing. But I also need to be able to create separate instances of `TestA` and `TestB` without instantiating `TestUserA` or `TestUserB`. 

So that I could do:

```
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

```