自作クラスのPrivateメンバを非表示にするには?

解決


58  2011-02-21 10:12:43  No: 102788  IP: [192.*.*.*]

初めまして。
VB6で開発をやっている者です。
あまり出来ないからといって困ることではないのですが、
自作クラスを作成した際に、大抵は以下のような形になると思うのですが、

---以下、ソースコード---
Private M_Value As Integer

Public Property Get Value As Integer

   Value = M_Value
End Property
Public Property Let Value(Byval intValue As Integer)

   M_Value = intValue
End Property
---以上、ソースコード---

このとき、VB6でデバッグ中にウォッチウィンドウやオブジェクトブラウザでこのクラスを参照すると、Privateな変数のM_Valueまで表示されてしまいます。これを非表示にするにはどうしたらよいのでしょうか?または、Private変数を使用しないやり方でもあるのでしょうか?
ご存知の方がいらっしゃいましたら、教えていただけたら幸いです。

編集 削除
魔界の仮面弁士  2011-02-21 12:05:14  No: 102789  IP: [192.*.*.*]

> Privateな変数のM_Valueまで表示されてしまいます。
同一プロジェクトの場合は、むしろ Private も見えていないと
デバッグ時に困るような気がしますが…。


> これを非表示にするにはどうしたらよいのでしょうか?
少なくとも、外からは見えないはずです。Private なので。

たとえばそのクラスを DLL プロジェクトに移動し、呼び出す EXE を別に作るとします。
この場合、DLL プロジェクトと EXE プロジェクトをプロジェクトグループ(*.vbg)にして
ひとつの開発環境で開いている場合、オブジェクトブラウザの表示は
EXE 側を選択しているか、DLL 側を選択しているかで、Private メンバーの可視が
変化することになります。


あるいは、VB 開発環境を 2 つ起動した場合も同様です。

ActiveX DLL プロジェクト "DLLProject" の "Class1" クラスに
先のコードを書いて、[F5] で実行状態にする。

もう一つの開発環境は、標準EXE プロジェクト "Project1" にし、
参照設定画面を開き、実行中の "DLLProject" にチェック。そして
  Dim p As Class1
  Set p = New Class1
  p.Value = 123
  MsgBox p.Value
のようなコードをステップ実行してみると…
EXE 側のオブジェクトブラウザやローカルウィンドウには表示されず、
DLL 側にのみ表示されるという状態になります。


> 非表示にするには
非表示設定といえばもう一つ。

メニューの[ツール]-[プロシージャ属性]を使うと、自身の公開メンバーを
非表示設定する事が出来ますが、こちらも、別プロジェクトから参照しないと
「非表示のメンバー」として扱われないようです。(同一プロジェクトグループも



> または、Private変数を使用しないやり方でもあるのでしょうか?
どうしてもというなら、変数以外の所に保持するぐらいしか思いつかないです。
SaveSetting ステートメントとか、Put # ステートメントとか、SetProp API とか。

編集 削除
58  2011-02-21 12:18:55  No: 102790  IP: [192.*.*.*]

お初にお目にかかります。
なるほど。プライベートメンバがウォッチリストやオブジェクト
ブラウザに表示されるのは、同一プロジェクト内のみでの話で、
実際にdll等にコンパイルされた物を参照する際には表示されない
という事ですね。
どうやら、的外れな事で悩んでいたようです。
御丁寧に教えていただき、ありがとうございました。

編集 削除