掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
インスタンス同士でお互いに呼び出す (ID:102157)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> あるインスタンスから他のインスタンスにデータの受け渡しをする、 そのクラスに受け入れる入り口さえ作れば何でも受け渡しは可能です。 渡す側のコードについてはどこにあろうが(クラス上のコードからであろうが、標準モジュール上のコードからであろうが)関係ありません。 入り口(Publicな何か)をどうやって作るかはクラスが扱えるならご存知でしょうが、 例えば下記を書いておけば別のインスタンスを受け取れますので、 それを自身の内部のどこかに保存しておけばよろしいです。 Public sub AddInstance(clsClassInstance as Class名) '複数種を受け取りたいならas Objectとか > インスタンス同士でお互いに呼び出す 「呼び出す」の意味がよくわかりませんが、 つまりそれぞれが相手側のインスタンスを持っていて、 相手のプロパティやメソッド等を呼び出すって事でしょうか。 それなら上記と同じです。 入り口を作ってそれぞれにインスタンスを渡せば実現します。 循環参照になりますのでインスタンスの破棄方法には十分注意して下さい。 多分ペンネームさんはクラスやインスタンスについて誤解(あるいは勉強不足)している気がします。 「クラスを動作させるとインスタンスって言う名前で呼ぶ」くらいにしか理解してないんじゃないでしょうか。 まずインスタンスとオブジェクト変数は実際には別物です。 目に見えて実際に扱っているものはインスタンスではなく、オブジェクト変数です。 インスタンスとは、クラスを元に実体化したあるひとつのオブジェクトの事です。(端的に言えばクラスの実体のひとつ) オブジェクトとは誰かに参照される(必要とされている)事で存在意味があります。 逆に、いずれからも参照されていない(必要とされていない)なら存在理由がないとみなされ自動的に破棄されてしまいます。 通常Newキーワードで生成されたインスタンスは、そのままSetステートメントによって任意のオブジェクト変数に代入されます。 Set objInstance = New Class1 よって、この時点ではこのオブジェクト変数だけがインスタンスを参照している事になります。参照数1です。 インスタンスの明示的な破棄は、実際には直接記述できません。 実際コード上ではオブジェクト変数にNothingを代入するだけです。 Set objInstance = Nothing Nothingキーワードは「どこでもない場所」を指すためのもので、 コード的にはこのオブジェクト変数に別の何かへの参照を代入しているに過ぎません。 しかしこれによりこのインスタンスへの参照数がひとつ減ります。 結果的に参照がゼロになったため、このインスタンスは自動的に破棄される事になります。 オブジェクト変数に入っている「参照」という値は、普通の変数と同じように代入が出来ます。 違いはSetステートメントが必要な点だけです。 つまりコピーはいくらでも作成できます。 クラスに別クラスあるいは同じクラスのインスタンスを持たせるのは、変数を持たせるのとコード上大差はありません。 ただ、「参照のひとつを消しても、すべての参照が消されない限りその実体であるインスタンスは破棄されない」というルールただそれだけが異なる点です。 よって、破棄の方法については十分検討する必要があります。 これは目に見えませんので。 以上が私のクラスに関する考え方です。 そういう目に見えない、実際に起きている現象をイメージしながら考えると、その質問内容がどこかおかしいなぁと思わざるを得ない私です。 私の考え方が間違えてるという可能性も否定できませんけど。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.