- PR -

Dispose Finalize

1
投稿者投稿内容
未記入
会議室デビュー日: 2007/06/05
投稿数: 5
投稿日時: 2007-06-20 18:29
基本的な質問ですみません。
DisposeとFinalizeがよくわかりません。

VBで、IDisposableを実装しようとすると、勝手に
Dispose()とDispose(disposing as boolean)を作ってくれるんですが、

MSDN
http://msdn2.microsoft.com/ja-jp/library/hks5e2k6(VS.80).aspx
によると
コード:
Protected Overrides Sub Finalize()
    Dispose(False)
    MyBase.Finalize()
End Sub


これも書かなきゃいけないとあるですが、ほんとですか?
もしそうなら、なんで自動でいれてくれないんでしょうか?

それと、
コード:
Protected Overrides 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
    MyBase.Dispose(disposing)
End Sub


これを読むとdisposingがtrueのときにアンマネージリソースが廃棄されるので、
finalizeの時にはアンマネージリソースは廃棄されないのですか?

よくわからないのでおしえてください
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-06-20 19:24
Booleanの引数を取るDisposeメソッドを作るのは、マイクロソフトが推奨する(?)Dispose実装のパターンです。
ですので、やることをやりさえすれば、Booleanの引数を取るDisposeを作る必要はありません。
まぁ特別な事情がなければパターンに従った方が良いでしょうが。

>disposingがtrueのときにアンマネージリソースが廃棄されるので
あれ……未記入さんの提示したMSDNのページでは確かにそう書いてありますね。誤植かな。
正しくはdisposingがtrueのときのif文内ではマネージドリソースを解放します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-20 19:52
?

true == マネージ リソースとアンマネージ リソース両方を解放
false == アンマネージ リソースを解放

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)