整数パラメーターを指定して、オブジェクトのインデクサーを動的に呼び出そうとしています。例えば
Public Class MyC
Default Public ReadOnly Property Items(index As Integer) As String
Get
Return "Integer indexer"
End Get
End Property
Default Public ReadOnly Property items(x As String) As String
Get
Return "String indexer"
End Get
End Property
End Class
...
dim obj as MyC = new MyC()
dim result as string = obj(10) 'Invoke property without using reflection
特定のプロパティ名を仮定せずにインデクサーを動的に呼び出したい場合、およびインデクサーがオーバーロードされる可能性があるという事実に関して、これを実行できます。
Dim a As Object = obj.GetType().InvokeMember("", Reflection.BindingFlags.GetProperty, Nothing, obj, {10})
Dim b As Object = obj.GetType().InvokeMember("", Reflection.BindingFlags.GetProperty, Nothing, obj, {"str"})
これらの行は、渡すパラメーター配列に基づいて、呼び出すインデクサーを便利に決定します。
可能であれば、プロパティを実際に (PropertyInfo オブジェクトとして) 格納することでパフォーマンスを向上させたいので、呼び出すたびにプロパティを再計算する必要はありません。
既定のメンバー インデクサーの特定のオーバーロードを取得し、メソッドを呼び出さずに実際に格納する方法はありますか?