Jacob Mason
Jacob Mason

Reputation: 1395

How to create a generic list of generics?

Please see my below code, I am trying to create a list of an interface which uses generics, but I need the generic version. So that you're aware, the generic type may differ for each entry in the list, it won't just be a list of IFoo with the same generic type.

Please let me know if you need clarification.

Public Interface IFoo

End Interface

Public Interface IFoo(Of T)
    Inherits IFoo

    Function Bar(foo As T) As T

End Interface

Public Class Foo(Of T)
    Implements IFoo(Of T)

    Private ReadOnly Foos As List(Of IFoo)

    Public Function Bar(foo As T) As T Implements IFoo(Of T).Bar
        For Each i In Foos
            ' Can't call Bar function from IFoo(Of T) as IFoo does not define the Bar function. 
        Next
    End Function
End Class

Upvotes: 1

Views: 52

Answers (1)

Martin Verjans
Martin Verjans

Reputation: 4796

About generic types, there is something you need to understand is that an object of type IFoo(Of String) is a completely different type from IFoo(Of Integer), they have almost nothing in common actually.

If IFoo(Of T) inherits from IFoo, then the only thing they have in common is IFoo.

So if you try running a loop and call a method they all have in common, you must put that method inside IFoo.

Also, even if you could do it, how would you manage the parameter ?

 For Each i In Foos
      'Let's say you can call it from here
      Dim Myparam As ??? 'What type is your param then ?
      i.Bar(of <What do you put here ?>)(Myparam)
 Next

Upvotes: 1

Related Questions