- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB.NETのUsingキーワードの使い方)
VB.NETのUsingキーワードの使い方
このQ&Aのポイント
- VB.NETのUsingキーワードを使ったファイルへのログ出力方法について質問します。Testクラスでボタンが押されたイベント処理の中で、TestFunction1とTestFunction2の中にもログを出力したい場合、StreamWriterオブジェクトをインスタンスフィールドに宣言し、Usingキーワードを使用してログを出力しています。
- Usingキーワードを使用することで、ファイルが正常にクローズされることが保証されます。しかしこの方法に問題はありません。
- 環境はVisual Studio 2005で、言語はVisual Basicです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#221368
回答No.1
StreamWriterやGraphicsなども、Application終了後にガベージコレクターに引っ掛かり、最終的には .Net がメモリを解放するはずなのですが、これらはリソースの消費が激しいので、Application内で何回も作成されることを防ぐために、まめに Usingブロックか、Disposeメソッドでメモリを掃除しろ、というのがMSの推奨です。 _swは、使い切ってから End Using に達するので、問題ないように思えます。ただ蛇足ですが、_swがNothingでないかどうかだけで、所定の機能が果たせた、という判断は若干疑問です(大きなお世話ですね)。
その他の回答 (1)
- todo36
- ベストアンサー率58% (728/1234)
回答No.2
swは生存期間がButton1_Click内なので、Button1_Clickの外の変数にするのは頂けない。 swはButton1_Clickのローカル変数として、他のメソッドには引数で渡せばよい。
質問者
お礼
>swは生存期間がButton1_Click内なので、Button1_Clickの外の変数にするのは頂けない。 >swはButton1_Clickのローカル変数として、他のメソッドには引数で渡せばよい。 おっしゃるとおりです。御指摘ありがとうございました。
補足
ddtddtddtさん、早速の御回答ありがとうございます。 Usingの使い方として、 Private Sub TestFunction3() Using sw As System.IO.StreamWriter = New System.IO.StreamWriter(filePath) sw.WriteLine("テスト") End Using End Sub というように、ローカルで宣言してその場で使い、メソッドをまたぐ様な使い方をしたことがなかったため、 質問内容のような書き方がありなのか??と思った次第です。 一応、質問内容のような場合とローカルのみで使う場合の両方のケースで、Usingブロックを抜けたあとの StreamWriterオブジェクトの様子をウォッチで確認したところ、両方のケースで同じように動いていました。 (と思われます) >ただ蛇足ですが、_swがNothingでないかどうかだけで、所定の機能が果たせた、という判断は若干疑問です。 これについてですが、いつもこのように処理してしまっているのですが・・・。私の勉強不足です。 勉強になりました。御回答ありがとうございました。