Visual Basic .NET Language
使い捨て物
サーチ…
IDisposableの基本コンセプト
IDisposable
を実装するクラスをインスタンス化する.Dispose
、そのクラスの使用を終了したらそのクラスの.Dispose
1を呼び出す必要があります。これにより、クラスは、使用されている管理対象または管理対象外の依存関係をクリーンアップすることができます。これを行わないとメモリリークが発生する可能性があります。
Using
キーワードは、 明示的に呼び出すことなく.Dispose
が呼び出されることを保証します。
例えばUsing
ない場合の例:
Dim sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
sr.Dispose()
今すぐUsing
:
Using sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
End Using '.Dispose is called here for you
1つの主な利点Using
例外がスローされたとき、それは保証するからしているが、ある.Dispose
呼ばれています。
以下を考慮する。例外がスローされた場合は、.Disposeを呼び出すことを覚えておく必要がありますが、ヌル参照エラーなどが発生しないようにオブジェクトの状態をチェックする必要があります。
Dim sr As StreamReader = Nothing
Try
sr = New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
Catch ex As Exception
'Handle the Exception
Finally
If sr IsNot Nothing Then sr.Dispose()
End Try
ブロックを使用するということは、これを覚えておく必要はなく、 try
内にオブジェクトを宣言することができます。
Try
Using sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
End Using
Catch ex As Exception
'sr is disposed at this point
End Try
1 DbContextオブジェクトで常にDispose()を呼び出す必要がありますか?いいえ
1つのオブジェクトをより多く宣言する
場合によっては、2つのDisposable
オブジェクトを連続して作成する必要があります。ブロックUsing
ネストUsing
避ける簡単な方法があります。
このコード
Using File As New FileStream("MyFile", FileMode.Append)
Using Writer As New BinaryWriter(File)
'You code here
Writer.Writer("Hello")
End Using
End Using
これに短縮することができます。主な利点は、インデントレベルを1つ増やすことです。
Using File As New FileStream("MyFile", FileMode.Append), Writer As New BinaryWriter(File)
'You code here
Writer.Writer("Hello")
End Using
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow