クラスとオブジェクトのインスタンス

インスタンスとは何か?

 クラスモジュールに定義されているオブジェクトを利用したい場合は、「オブジェクト変数」という特別な変数を用意し、それをオブジェクトとして利用します。

これは、構造体を利用する場合と似ています。
構造体の場合も、そのひな形に対する実体(変数)が必要でしたね。

 クラスモジュールはフォームモジュールと違って、具体的に変数を用意してやらないと使うことはできません。たとえば、TV というクラスがあったとしても、

    TV.Channel = 6

という風に、直接 TV を操作することはできません。
TV というのはクラス名だからです。

    Dim MyTV As TV

オブジェクト変数 MyTV を、TV クラスのオブジェクトとして宣言しています。

    MyTV.Channel = 6

オブジェクトは、このようにして操作します。
ところが、このまま実行してみると、「オブジェクト変数が設定されていない」というエラーが発生します。

実は、オブジェクト変数とは「オブジェクトの実体を入れる器」でしかなく、宣言しただけでは「オブジェクト」にはならないのです。

そこで、「オブジェクトの実体」を生成し、この箱に入れる作業が必要になります。

オブジェクト変数 オブジェクト変数自体は、ただの箱…
インスタンス オブジェクト変数に入る実体(インスタンス)
インスタンスが入ったオブジェクト変数 = オブジェクト インスタンスが入ったオブジェクト変数
クラス クラス(設計図)

    Set MyTV = New TV 'Set object = New class

New は、新しいオブジェクトインスタンスを生成するキーワードです。
オブジェクトの実体のことを、「インスタンス」と呼びます。

上のようにすると、そのクラスの新しいインスタンスが生成されます。

前に付いている Set は、「オブジェクトインスタンスの代入」である場合に必要なキーワードです。通常の変数代入の時にはこれは必要ありませんが、実は Let というキーワードがあり、省略されているだけです。オブジェクト代入の場合は Set を省略することができません。

    Dim MyTV As TV
    
    Set MyTV = New TV
    Let MyTV.Channel = 6

これでようやく MyTV を TV クラスのオブジェクトとして扱うことができます。

インスタンスの作成

コントロールとクラスの違いについて

 クラスとコントロールは同じような存在です。

前者は、このようにコードの中で変数として生成され、後者は、フォームの上に貼り付けられて生成されるのです。

フォームもコントロールもクラスですから、その実体もオブジェクト変数と同じような存在です。クラスモジュールの実体と違う点は、そのインスタンスの生成方法や存在する場所です。フォームやコントロールは、プロジェクトに追加するだけで宣言され、プログラム実行時に自動的に生成されているのです。

一方のクラスモジュールの実体は、自動的には生成することができませんから、このような手順が必要なのでした。

まとめ

 基本的に、クラスモジュールから提供されるオブジェクトはこの方法で利用します。構造体データとはちょっと違います。しっかり抑えておいてください。

  1. オブジェクト変数の宣言(必ずそのクラス型で宣言する)
  2. Set object = New class
    または、Set object = object で、オブジェクト変数にインスタンスを格納
  3. オブジェクトの利用
2002年 2月19日(火) 更新