2017-08-17 18 views
1

私の下のコードを見てください、ジェネリックスを使用するインタフェースのリストを作成しようとしていますが、ジェネリック版が必要です。あなたが知っているように、ジェネリックタイプはリストの各エントリーごとに異なるかもしれません、同じジェネリックタイプを持つIFooのリストだけではありません。ジェネリックの一般的なリストを作成するには?

説明が必要な場合はお知らせください。一般的なタイプについて

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 
+0

バー機能からバー機能を呼び出してもよろしいですか? – Grim

+0

@Grim最良の例ではないかもしれませんが、それは私の実際のシナリオに似ています。私の質問は、ジェネリックが不明で異なることがあるIFooのリストを作成する方法です。 –

答えて

1

、あなたが理解する必要がある何かがあるタイプIFoo(Of String)の目的はIFoo(Of Integer)から全く異なるタイプであるということです、彼らは実際には共通してほとんど何も持っていません。

IFoo(Of T)IFooから継承されている場合、共通点はIFooです。

したがって、ループを実行して、それらが共通するメソッドを呼び出す場合、は、IFooを入れなければなりません。

また、実行することもできますが、どのようにパラメータを管理しますか?

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 
関連する問題