|
■No35675 (よりみち さん) に返信 > 上記をまとめると、IDisposableインターフェースを実装しているクラスは、 > 使用後は、全てDisposeしないといけないのでしょうか?
あえて Dispose しない場合もあります。たとえば、 Using stm As New FileStream("C:\test.txt", FileMode.Create) Dim writer As New StreamWriter(stm) writer.WriteLine(Now.ToLongTimeString()) writer.Flush() stm.Seek(0, SeekOrigin.Begin) Dim reader As New StreamReader(stm) MsgBox(reader.ReadLine(), vbSystemModal) stm.Close() End Using というコードを Using stm As New FileStream("C:\test.txt", FileMode.Create) Using writer As New StreamWriter(stm) writer.WriteLine(Now.ToLongTimeString()) writer.Flush() End Using stm.Seek(0, SeekOrigin.Begin) Using reader As New StreamReader(stm) MsgBox(reader.ReadLine(), vbSystemModal) End Using stm.Close() End Using と書くわけにはいきませんよね。
> マネージドリソースの場合、 ちなみに managed という用語は、Microsoft の公式には(マネージドではなく)マネージと記述する事になっています。
> またWindowsFormのOnPaintイベントでは、 > e.GraphicsをDisposeするといかんといった記述をどこかで見た気が…。 それを Dispose する役割を担うのは、イベントの呼び出し元である Control 自身となります。 イベント引数の e.Graphics は、開発者が生成した物では無いため、Dispose してはいけません。
CreateGraphics のように、開発者自身が生成したインスタンスの場合は、開発者自身が Dispose しなければなりません。
同様の理由から、 Pen pen1 = new Pen(Color.Red); Pen pen2 = Pens.Red; とあった場合、pen1 は Dispose しなければなりませんが、pen2 を Dispose することは NG です。
|