VB.NETの遅延バインディングとレフレクション

VB.NETで以下のようなコードで自動的にダウンキャストされてオーバーロードされた処理に飛んでくれるので驚いてたんだけれど、これは遅延バインディングされる設定になってたから、という事をやっと理解した。(エラーメッセージを読んで)

Option Strict On をしたVB.NETや、C#で同じ事を実現するにはレフレクションを使う必要があった。まぁ動的に探さないといけないんだし当たり前の事だけど自動的に行われていた事にすぐに気付けなかった…。

'Option Strict On

Imports System.Reflection

Public Class B
End Class

Public Class C
End Class

Module Module1

	Sub Test(ByRef v As B)
	End Sub

	Sub Test(ByRef v As C)
	End Sub

	Sub Main()
		Dim o As Object = New B
		Test(o)
		'GetType(Module1).InvokeMember( _
		'	"Test", _
		'	BindingFlags.Public Or BindingFlags.Static Or BindingFlags.InvokeMethod, _
		'	Nothing, _
		'	Nothing, _
		'	New Object() {o} _
		')
	End Sub

End Module