アプリ版:「スタンプのみでお礼する」機能のリリースについて

変数をクラスに設定するときのコードの書き方ですが、

sub プロシージャー名()
dim m as クラス名
set m = new クラス名
・・・・
end sub

sub プロシージャー名()
dim m as new クラス名
・・・・
end sub
とかいても(簡単なプログラムでは)同じ働きをするのですが
違いはあるのでしょうか。

A 回答 (4件)

[Aタイプ]


As New Class1

[Bタイプ]
As Class1
= New Class1


.NETであれば、どちらでもよいと思います。

.NETではないVBや、VBAでは、私個人としてはBタイプはお勧めしません。

あるメーリングリストの請負いなのですが、As New撲滅推進キャンペーンをしておりました。
(.NETがまだない時代からのメーリングリストです)


Bタイプの
Dim 変数 As New Class1



Set 変数 = Nothing
としても変数がNothingされず、再度「New Class1」がセットされるようです。

その結果、無駄にメモリを消費し続けるという状態になるようです。

しかし.NETからは、Nothingはされるので、どちらでもよいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
.NETであれば変わらないがVBの場合
最後にSet=Nothingで初期化?しますが、それができてなくメモリを食ってしまうのですね。

お礼日時:2007/09/13 23:58

#2です。



メーリングリストの内容を一部引用します。

Dim rs As New ADODB.Recordset
の場合,rs が参照されるところではつねに
If rs Is Nothing Then
  Set rs = New ADODB.Recordset
End If
というコードが暗黙のうちに挿入されているということになります。
結果毎回判定を行い、小規模のプロジェクトであれば気にする必要のレベルではないかも知れないけど、処理速度が遅くなってしまうという欠点があるそうです。


私の環境にVB6のMSDNがインストールされていないのですが、、、
上記のような発言をされた方は、MSDNの以下の項を読むように、言っておりました。

[Visual Studio 6.0 ドキュメント]
└[Visual Basic ドキュメント]
 └[Visual Basic の使用方法]
  └[プログラミング ガイド]
   └[Visual Basic を使ってできること]
    └[各種のコンポーネントを利用したプログラミング]
     └[オブジェクトへの参照の作成方法]
      ├
      :
      :
      └
    • good
    • 0

その変数に対するオブジェクトの生成を1回しかやらない(明示的にNothingを代入しない)なら、違いはほとんどありません。



「As New」を指定しない場合、一旦、その変数にNothingを設定してオブジェクトを破棄した後に、
再度その変数でオブジェクトを使用しようとした場合、もう一度
明示的に「= New」 を実行しなければなりません。
#そうしないとエラーになる。

「As New」を指定した場合、オブジェクトを破棄した後、
再度その変数でオブジェクトを使用しようとした場合、自動的に「New」が実行されます。

#その変数を再度アクセスしない限りNewは実行されません。
#便利な反面、オブジェクトの生成・破棄のタイミングが分かりにくくなります。
    • good
    • 0
この回答へのお礼

ありがとうございます。

クラスを複数回使う(通常は当たり前なのですが)この場合、As Newとすれば自動的に「New」が実行されるのなら

dim m as new class1
の方がいいですね。

ただ、オブジェクトの生成・破棄のタイミングが分かりにくくなりますため一長一短があるということですね。

お礼日時:2007/09/14 00:01

違いはないと考えてよいです。


Dim m As New クラス名
の場合、実際にインスタンスが生成されるのは、最初に m が参照されるときですが、違いができるとすれば、インスタンスが生成されるタイミングくらいではないでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。setでインスタントを生成するか、dimでインスタントを生成するかの差なのですね。

お礼日時:2007/09/12 18:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!