Creating a new intance of a generic type can be done/checed at compile time.
Public Class SomeClass(Of T As {New})
Public Function GetInstance() As T
Return New T
End Function
End Class
Or with limited types:
Public Class SomeClass(Of T As {New, SomeBaseClass})
Public Function GetInstance() As T
Return New T
End Function
End Class
Public Class SomeBaseClass
End Class
The baseClass (if none given it is Object) must have a parameter less constructor.
This can also be done at runtime through reflection