最近、実装したいくつかのカスタム ユーザー コントロールにインターフェイスを追加しました。インターフェイスはかなり基本的です。チェーンをサポートするメソッドが 1 つあります。
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
この時点まではすべて正常に動作します。IMyInterface
次のように、すべてがインターフェイスを実装するコントロールのコレクションをループしようとすると、問題が発生します。
Dim myList = New List(Of IMyInterface(Of WebControl))
myList.Add(someCustomControl)
myList.ForEach(Sub(i) i.DoSomething())
someCustomControl
の代わりにMyCustomControl
実装する です。IMyInterface(Of MyCustomControl)
IMyInterface(Of WebControl)
2 行目 (追加しようとしている場所someCustomControl
)でこのエラーが発生しています。
Option Strict On は、'MyCustomControl' から 'IMyInterface(Of WebControl)' への暗黙的な変換を禁止します。
このエラーを回避する方法はありますか? 私はそれを機能させることに近づいていますが、ジェネリックについて十分に知っているわけではありません。