![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
毎々参考にさせていただいております。
早速ですが質問させていただきます。
あるフォームでボタンが押された時に、下記の3つの処理でログを出力したい場合なのですが。
a) ボタンが押されたイベント処理
b) ボタンが押されたイベント処理の中で呼ばれるTestFunction1の中
c) ボタンが押されたイベント処理の中で呼ばれるTestFunction2の中
複数のメソッドに参照されるということで、StreamWriterのオブジェクトはインスタンスフィールドに宣言しています。
Public Class Test
'StreamWriter型のフィールド宣言
Private _sw As System.IO.StreamWriter
'ボタンクリックイベント処理
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me._sw = New System.IO.StreamWriter(filePath)
Using Me._sw
Me._sw.WriteLine("Button1はクリックされました")
Me.TestFunction1()
Me.TestFunction2()
End Using
End Sub
Private Sub TestFunction1()
'TODO:ここに処理
If Me._sw IsNot Nothing Then
Me._sw.WriteLine("TestFunction1は処理されました。")
End If
End Sub
Private Sub TestFunction2()
'TODO:ここに処理
If Me._sw IsNot Nothing Then
Me._sw.WriteLine("TestFunction2は処理されました。")
End If
End Sub
End Class
目的とする処理は実現されているのですが、このようなUsingの使い方は問題ないのでしょうか?
どなたかに御回答いただければうれしく思います。よろしくお願いいたします。
環境は下記のような感じです。
環境IDE:Visual Studio 2005
言語 :Visual Basic
No.1ベストアンサー
- 回答日時:
StreamWriterやGraphicsなども、Application終了後にガベージコレクターに引っ掛かり、最終的には .Net がメモリを解放するはずなのですが、これらはリソースの消費が激しいので、Application内で何回も作成されることを防ぐために、まめに Usingブロックか、Disposeメソッドでメモリを掃除しろ、というのがMSの推奨です。
_swは、使い切ってから End Using に達するので、問題ないように思えます。ただ蛇足ですが、_swがNothingでないかどうかだけで、所定の機能が果たせた、という判断は若干疑問です(大きなお世話ですね)。
この回答への補足
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でないかどうかだけで、所定の機能が果たせた、という判断は若干疑問です。
これについてですが、いつもこのように処理してしまっているのですが・・・。私の勉強不足です。
勉強になりました。御回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA kernel32 の意味
-
VBSの処理中一旦処理を止めて再...
-
VBA メッセージボックスを自動...
-
VBA、UserFormを前面に出力して...
-
VB6 コマンドボタン クリック...
-
Excel VBA で処理中断(DoEvents...
-
キーボード入力、マウス操作を...
-
ACCESS側からEXCELの書式を設定...
-
メッセージボックスのボタン名変更
-
for文実行中を途中で中断するに...
-
Excel(VBA)シート上のコマンド...
-
C#で処理中画面を表示したい。
-
マウスのクリックを無視したい
-
InvalidateRectがうまくいかない
-
Application.ScreenUpdating=Fa...
-
エクセルが勝手に立ち上がる
-
VBスクリプトで「お待ち下さい...
-
ASP.NETでのメッセージ画面を出...
-
<input type="file">タグで「キ...
-
OSシャットダウン時の常駐アプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
ACCESS側からEXCELの書式を設定...
-
VBSで応答不要のメッセージボッ...
-
VBA kernel32 の意味
-
Excel VBA で処理中断(DoEvents...
-
VBA、UserFormを前面に出力して...
-
エクセルVBAでクリップボード内...
-
ASP.NETでのメッセージ画面を出...
-
シャットダウン時のExcel強制終...
-
Application.ScreenUpdating=Fa...
-
VBA メッセージボックスを自動...
-
【C#】 あるイベントから別イ...
-
MFCのワーカースレッドとUIスレ...
-
ASP VBScriptでスクリプト実行...
-
エクセルが勝手に立ち上がる
-
VB.NETで数秒間msgboxの...
-
EXCEL VBA「Application.Displa...
-
<input type="file">タグで「キ...
-
MFCのメニューバーのイベント取得
おすすめ情報