前回の続きドス:evil:
前回「Dispose」の実装について記述しましたが
'クラスのリソースを解放するオーバーロードされた Dispose メソッド。
'このメソッドは基本クラスの Dispose メソッドおよび Finalize メソッドから呼び出す必要があります。
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
' Insert code to free unmanaged resources.
End If
' Insert code to free shared resources.
End If
Me.disposed = True
End Sub
引数にBuooleanの引数があり、内部If文でTrueとFalseで開放の種類を選別できる形になっていますが、
これの意味を解説しますね。
.NETではCLRという中間言語を使用して管理しています。
しかしWin32APIなど旧来のロジックも記述することが出来るので、開放時のタイミングがNew元が開放するのと
GC任せで開放するのではタイミングにずれが生じ、後者の場合CLR以外の記述がある時に問題が発生する可能性があります。
New元が呼び出す「Public Overloads Sub Dispose() Implements IDisposable.Dispose」内では
全ての開放が出来る「Dispose(True)」で呼び出され
いつ呼び出されるか分からない「Protected Overrides Sub Finalize()」内では
CLRが管理するものだけ開放が出来る「Dispose(False)」で呼び出されているのです。
なので特殊対応しているものでない限りIf外に記述することになるでしょうね:razz:
特殊対応は責任を持ってその都度、後処理が必要になるということですな:cool: