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

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

投稿日時 : 2008年5月20日 20:28

フィードバック

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

まず、Moduleの既定(省略時)のアクセスがFriendなのでプロジェクト内の話ならPublicに変更してもいいんじゃね?ということと
解説にも書いてありますが、クラスや構造体を指す「型」とは違うということから、外からアクセスするのは技術的可否は別として変じゃね?
というところでしょうか。
2008/05/20 20:44 | まどか

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

あ、最後の動機を見てなかった。。。
2008/05/20 20:46 | まどか

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

PrivateなものをNUnitでテストするの?
という点が疑問。
根本原因はなんかUnitTestの使い方が違う点じゃないかと。
2008/05/20 21:34 | はつね

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

> 根本原因はなんかUnitTestの使い方が違う点じゃないかと。
えぇ、まぁそうなんですよね。。

ただ今回のは公式な(?)単体テストとして記録を残すわけではなくて
ちょっと気になったから、動作の確認がてらやってみたかっただけ
みたいです(^^;
2008/05/20 22:41 | あひる

# http://burberry.suppa.jp/

匿名なのに、私には誰だか分かる・・・(^_^;)ありがとう。。。
2012/11/07 0:06 | バーバリー セーター

コメントの投稿

タイトル
名前
URL
コメント