タイトル : インスタンスについて 投稿日 : 2011/06/01(Wed) 21:24 投稿者 : 魔界の仮面弁士
> ついでで悪いのですが、 折角なので、インスタンスについて、もう少し掘り下げてみましょう。 DAO で mdb を扱う際には、Database オブジェクトを Dim db As DAO.Database Set db = 〜〜 のように、変数に Set して使うことが多いですよね。この場合、 「Database クラスのインスタンスを変数 db にセットしている」あるいは、 「Database 型のオブジェクトを変数 db にセットしている」と表現できます。 インスタンスとはクラスを実体化させたものであり、 VB6 では「オブジェクト」という表現が使われる事が多いです。 大雑把にいってしまうと、Database、Form、TextBox、App 等は、 それぞれが『クラス』であり、そのクラスが実体化されたものが 『インスタンス』であるという事です。 ---------------------- これだけだと分かりにくいと思うので、もう少し別の例を出してみます。 たとえば、ツールバーにある TextBox コントロールをフォームに貼ると、 画面上に Text1 や Text2 ができますよね。Text1 と Text2 はどちらも TextBox です。 これらはそれぞれ同じ型のオブジェクトなわけですが、別の物です。 それぞれは独立しており、Text1.Text を書き換えても Text2.Text には影響しません。 ――ここまでは良いですよね? この場合、ツールバーにある物は TextBox のクラスであり、 そしてフォーム上に実体化(インスタンス化)された物については TextBox オブジェクトと呼ぶことができます。分かりにくい表現かも知れませんが。 さて、これを変数を介して利用してみた場合、 Private txt As TextBox Private Sub Form_Load() Set txt = Me.Text1 End Sub のような使い方も可能です。 この場合、変数 txt も Text1 も、同じテキストボックスを参照することになります。 実体は一つなので、どちらを使ってアクセスした場合も同じ結果が得られます。 'Text1.Text = "A" txt.Text = "B" MsgBox Text1.Text ' ← B と表示される そしてこの後、変数 txt を Set txt = Me.Text2 にすると、txt に対する操作は Text2 に対する操作として扱われます。 ですが、Text1 の実体は無くなったわけではありません。 フォーム上に残っている以上、変数 txt に参照されなくなった後も、 Text1 のコントロールは引き続き利用できます。 今回問題となったコードも同じこと。 変数 db が master.mdb を指すようになったとしても、 ID.mdb を開いている Database インスタンスは残っていますから、 rsID は引き続き利用できるわけです。 変数 txt が Text2 を指すようになったとしても、 Text1 コントロールはフォーム上に残っているので、 テキストボックスを使い続けることができるのと同じように。 > 初心者でもインスタンスについてわかりやすいページがありましたら わかりやすいかどうかは別として……"インスタンス" について 書かれた資料としては、ヘルプで言うとこのあたりが該当します。 [Visual Basic の使用方法] ├[プログラミング ガイド] │└[Visual Basic の基本] │ └[プログラミングの基礎] │ └[オブジェクトの使用方法] │ ├[オブジェクトとは]★ │ └[オブジェクトの作成]☆ └[コンポーネント ツール ガイド] └[ActiveX コントロールの作成方法] └[ActiveX コントロール作成に関する用語] └[コントロール作成に関する用語]★ 上記から少し抜粋してみると、以下のような記述が見つかります。 堅苦しい文章なので読みにくいかも知れませんが、書いてある内容は 今回解説した内容と同等なので、該当ページについて目を通しておいてください。 | オブジェクトとは、1 つの単位として扱うことのできるコードとデータの組み合わせです。 | コントロールやフォームなどアプリケーションの一部も 1 つのオブジェクトであり、 | アプリケーション全体も 1 つのオブジェクトです。 | ツールボックス上のコントロールはクラスを表します。コントロールのオブジェクトは、 | フォーム上に配置するまでは存在しません。コントロールをフォーム上に配置すると、 | コントロールのクラスのコピーである "インスタンス" が作成されます。 | クラスの各インスタンスが、アプリケーションで参照する各オブジェクトになります。 | Visual Basic を使って開発するコントロールは、実際にはコントロール クラスです。 | コントロールは、コントロール クラスから作成されます。コントロールを | フォームに配置すると、そのコントロール クラスの インスタンス が作成されます。 |