tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル インスタンスについて
投稿日: 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 を使って開発するコントロールは、実際にはコントロール クラスです。
| コントロールは、コントロール クラスから作成されます。コントロールを
| フォームに配置すると、そのコントロール クラスの インスタンス が作成されます。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。