私は最近実装したカスタムユーザーコントロールにインターフェイスを追加しました。インターフェイスはかなり基本的です。ジェネリック、インターフェイス、キャストに関する問題
Public Interface IMyInterface(Of T As WebControl)
Function DoSomething() As T
End Interface
実装はまた、かなり基本的なもの:
Public Class MyCustomControl
Inherits CompositeControl
Implements IMyInterface(Of MyCustomControl)
Public Function DoSomething() As MyCustomControl _
Implements IMyInterface(Of MyCustomControl).DoSomething
' do stuff
Return Me
End Class
すべてが、この時点までに正常に動作しますこれは、チェーン化をサポートしてい一つの方法を持っています。
Dim myList = New List(Of IMyInterface(Of WebControl))
myList.Add(someCustomControl)
myList.ForEach(Sub(i) i.DoSomething())
someCustomControl
がIMyInterface(Of MyCustomControl)
代わりのIMyInterface(Of WebControl)
実装MyCustomControl
です:私はすべてのようにのように、IMyInterface
インタフェースを実装するコントロールのコレクションをループしようとすると問題が生じます。
私は(私はsomeCustomControl
を追加しよう)二行目に、このエラーを取得しています:
オプション厳密には、「(WebBrowserコントロールの)IMyInterfaceという」から「MyCustomControl」からの暗黙的な変換を禁止します。
このエラーを回避する手段はありますか?私はそれが働くことに近いですが、私はこの点を超えてジェネリックについて十分に知りません。
あなたは 'Dim myList =新しいリスト(Of WebControl)'のようにmyListを宣言しようとしますが、 'Dim myList =新しいリスト(Of Object)'などを試してみてください。 – Vishal
@Vishal 'IMyInterface'型を持たずに、' ForEach'ループ内のオブジェクトに対して 'DoSomething()'を呼び出すことができないと思います。 – jbabey
申し訳ありませんが、私はそれを知りませんでした。 – Vishal