
No.2ベストアンサー
- 回答日時:
[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はされるので、どちらでもよいと思います。
ありがとうございます。
.NETであれば変わらないがVBの場合
最後にSet=Nothingで初期化?しますが、それができてなくメモリを食ってしまうのですね。
No.4
- 回答日時:
#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 を使ってできること]
└[各種のコンポーネントを利用したプログラミング]
└[オブジェクトへの参照の作成方法]
├
:
:
└
No.3
- 回答日時:
その変数に対するオブジェクトの生成を1回しかやらない(明示的にNothingを代入しない)なら、違いはほとんどありません。
「As New」を指定しない場合、一旦、その変数にNothingを設定してオブジェクトを破棄した後に、
再度その変数でオブジェクトを使用しようとした場合、もう一度
明示的に「= New」 を実行しなければなりません。
#そうしないとエラーになる。
「As New」を指定した場合、オブジェクトを破棄した後、
再度その変数でオブジェクトを使用しようとした場合、自動的に「New」が実行されます。
#その変数を再度アクセスしない限りNewは実行されません。
#便利な反面、オブジェクトの生成・破棄のタイミングが分かりにくくなります。
ありがとうございます。
クラスを複数回使う(通常は当たり前なのですが)この場合、As Newとすれば自動的に「New」が実行されるのなら
dim m as new class1
の方がいいですね。
ただ、オブジェクトの生成・破棄のタイミングが分かりにくくなりますため一長一短があるということですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) Excel・ユーザーフォームの情報を受け渡したい 4 2022/06/08 10:11
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メモリ解放について、ご教授く...
-
関数で値渡しと参照渡しではど...
-
C# panel内のコントロールの使...
-
C#でのコンパイル時のエラー
-
メモリリークが発生するのはど...
-
クラスの設定について
-
Visual studio c# android オブ...
-
ソースの書き方について
-
VB6では、Applicationは未定義...
-
WindowsAPIのリストビューの...
-
VBA チェックボックスをオーバ...
-
FriendとPublicの違い。。。
-
ダイアログ表示時にチェックボ...
-
MFCでSDIからダイアログの呼び出し
-
既定のコンストラクタがない?
-
ボタンのオーナードローについて
-
データ作成中
-
条件によって別のクラスのイン...
-
任意の解像度のメモリデバイス...
-
継承したクラスを、継承元のク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
オブジェクト型の変数が定義さ...
-
C# panel内のコントロールの使...
-
delete演算子によるメモリ解放...
-
CreateObjectとはどういう意味...
-
関数で値渡しと参照渡しではど...
-
ボタンを押すとラベルの文字を...
-
オブジェクトをどこでdisposeす...
-
クラス内にWin32APIのコールバ...
-
コンストラクタ内でのthisポインタ
-
【VC++6.0(MFC)】「Out of memo...
-
C#でのUNZIP32.DLLの利用方法が...
-
SetとNothingの存在意味?
-
一時オブジェクト?の生存期間
-
「R = ActiveCell」がエラーに...
-
最小化したフォームを元に戻す
-
DataGridViewがクラッシュする
-
クラス?オブジェクト?インス...
-
メモリ解放について、ご教授く...
-
メモリリークが発生するのはど...
-
UMLでの「オブジェクト」と「イ...
おすすめ情報