VBAは、Javaや.NET系言語程ではありませんが、
オブジェクト指向をサポートしています。
Javaや.NETとの違いの1つとして、
インスタンスの生成タイミングがあります。
Javaや.NETの感覚でコーディングすると間違いに陥りやすいので、
備忘録として記載します。
[インスタンスの生成タイミング]
インスタンスの生成はJavaなどでは、
『New』を指定するとインスタンスが生成されますが、
VBAでは記載の仕方によって、
必ずしも生成されるとは限りません。
例えば、Javaの場合、
newを指定するタイミングでインスタンスが生成され、
その参照が変数に格納されます。
それに対して、VBAの場合は、
Newを指定したタイミングではインスタンスは生成されず、
その変数に初めてアクセス(メソッド呼出しなど)するタイミングで、
インスタンスが生成されます。
インスタンス生成タイミングの検証として、
下記のコードを実行してみると以下のようになります。
もし、Javaや.NETと同じように
宣言時にインスタンス生成がされるのであれば、
出力結果は、
(1)インスタンスをNew付で宣言します。
(a)インスタンスが生成されました。 ★JavaやC#ならこのタイミング
(2)これからインスタンスにアクセスします。
(b)MethodA実行中
となるはずですが、
実際は次のようになります。
(1)インスタンスをNew付で宣言します。
(2)これからインスタンスにアクセスします。
(a)インスタンスが生成されました。 ★VBAの場合、初回メソッド実行時
(b)MethodA実行中
これは、宣言時にインスタンスは作成しておらず、
MethodAを実行する際に、インスタンスが生成していることを示します。
[VBAのコード]
| |
[VBA]インスタンスの生成タイミングの検証(Hogeクラスの呼出し側) |
| |
[VBA]インスタンスの生成タイミングの検証(Hogeクラス) |