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