投稿数 - 14, コメント - 149, トラックバック - 0

2008年5月20日

モジュールのPrivateメンバへアクセスしてみる

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で行いたい」のだそうです。
#コードを書く人とテストする人が別だから、今さらクラス化はできない、とか。なんか切ないなぁ。。。

posted @ 20:28 | Feedback (5)