VBのModule内にあるPrivateなメソッドを外部から呼び出したいんだけど上手くいかない。どう書けばいい?という相談を受けました。
で、リフレクションを使えばできるんじゃないかなぁ、と軽くみてたんですが、Moduleの奴はちょっと特殊なので、型の情報が欲しいと思っても素直に Module1.GetType() とか書くと怒られてしまいます。。
まず、そこでひとはまりしました・・・orz.
試行錯誤した結果、以下のようなコードを書けばできなくは無いということが分かったのですが・・・やっぱり、これを使いたい場面というのが思い浮かばない。。。
Dim mi As MethodInfo = _
GetType(Module1).GetMethod("sayHello", BindingFlags.NonPublic Or BindingFlags.Static)
mi.Invoke(Nothing, Nothing)
とりあえず、ポイントはモジュールのすべてのメンバは、暗黙的に Shared になります。という所でしょうか。明示的にSharedと書いてなくても暗黙的にSharedとして扱われるので BindingFlags.Static を指定する必要があります。
役に立つのか、これ?(^^;
#曰く、「すでに出来上がっているModuleのPrivateメンバのテストをNunitで行いたい」のだそうです。
#コードを書く人とテストする人が別だから、今さらクラス化はできない、とか。なんか切ないなぁ。。。