VBAでもオブジェクト変数の宣言と同時にインスタンス化することができます。
Dim objHoge As New clsHoge
知らなかった人も多いと思いますが、実は、知らなかったほうが良かったかもしれません。
というのも、実はVBAの「As New」は「特殊」で、下記の2つは全く同じというわけではないのです。
Dim objHoge As clsHoge Set objHoge = New clsHoge
Dim objHoge As New clsHoge
VB.netを知っている人であれば、両者は確実に同じものと思い込んでいることでしょう。実際、私もそうでしたから。
実際には、この構文は、変数を参照した時点でNothingだったら、自動でNewしてくれるというものなのです。
この振舞のどこが問題なのか?
下記のサイトで、「As New」の振舞い、どうして「As New」を使ってはいけないのか詳しく解説されています。
これを読むと「As New」は決して使ってはいけないものだということがよく分かります。
宣言と同時にインスタンス化を行う(ように見える)As New は決して使ってはいけない。
この構文は、変数を参照した時点でNothingだったら、自動でNewしてくれるというもの。
一見便利なこの振舞のどこがいけないか?というと、明示的にNothingを代入した後に、思わず変数を参照してしまうと、本来はNothingエラーとなるべきところがそうならず、エラーの温床となってしまう可能性があること。
コメント