- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Finalyメソッドを2回呼べとはどういうことですか?)
Finalyメソッドを2回呼べとはどういうことですか?
このQ&Aのポイント
- Finalyメソッドを2回呼べとは、Disposeメソッドを呼び出す際にガーベージコレクションがFinalizeメソッドを呼び出すため、合計で2回実行されるということです。
- クラスフィールドによって、Disposeメソッドを2回呼び出しても何も実行しないようにする必要があります。
- Finalyメソッドが定義されているオブジェクトをマネージヒープから削除するためには、最低でも1回のガーベージコレクションが必要です。これは、Finalyメソッドによってオブジェクトがグローバル変数に代入される可能性があるためです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
そもそもFinalyメソッドなどと言うものが,.NET Frameworkの標準のライブラリには存在しません。 たまたま,その本のコードでFinalyというメソッドを作っていて,それの実装についての説明か何かなのではないでしょうか。
その他の回答 (1)
- Yune-Kichi
- ベストアンサー率74% (465/626)
回答No.1
> Disposeメソッドを呼び出すとき、ガーベージコレクションがFinalizeメソッドを呼び出すので合計2回実行される。 > クラスフィールドによって、クライアントがDisposeメソッドを2回呼び出しても何も実行しないようにする必要がある。 Finalizeメソッドは,通常の使用をしている限り,1度しか呼ばれません。 # Finalizeメソッド中で再度生存オブジェクトになった場合などが特殊例。 複数呼ばれる可能性があるのはDisposeメソッドの方です。 ただし,通常Disposeメソッドの中でGC.SupressFinalize(Me)を呼び出して,Finalize経由の呼び出しを抑制します。 > Dispseメソッド 2回呼んだらダメ クラスフィールドで回避 Disposeメソッドは複数回呼ばれても安全なように作る必要があります。 > Finalyメソッド 2回呼べ ・・・対応方法不明・・・ FinalyメソッドがFinalizeメソッドの書き間違いだとして, そもそもFinalizeメソッドはシステムが呼び出す物なので,対応をする必要はありません。
質問者
お礼
ありがとうございます。 FinalyメソッドとFinalizeメソッドがあるのですね。 どうも2種類を混合しているようです。 もう一度、本を読み直したいと思います。
お礼
ありがとうございます。 FinalizeとDisposeメソッドが存在するだけですね。 調べ直します。