• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Finalyメソッドを2回呼べとはどういうことですか?)

Finalyメソッドを2回呼べとはどういうことですか?

このQ&Aのポイント
  • Finalyメソッドを2回呼べとは、Disposeメソッドを呼び出す際にガーベージコレクションがFinalizeメソッドを呼び出すため、合計で2回実行されるということです。
  • クラスフィールドによって、Disposeメソッドを2回呼び出しても何も実行しないようにする必要があります。
  • Finalyメソッドが定義されているオブジェクトをマネージヒープから削除するためには、最低でも1回のガーベージコレクションが必要です。これは、Finalyメソッドによってオブジェクトがグローバル変数に代入される可能性があるためです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

そもそもFinalyメソッドなどと言うものが,.NET Frameworkの標準のライブラリには存在しません。 たまたま,その本のコードでFinalyというメソッドを作っていて,それの実装についての説明か何かなのではないでしょうか。

rescue100
質問者

お礼

ありがとうございます。 FinalizeとDisposeメソッドが存在するだけですね。 調べ直します。

その他の回答 (1)

回答No.1

> Disposeメソッドを呼び出すとき、ガーベージコレクションがFinalizeメソッドを呼び出すので合計2回実行される。 > クラスフィールドによって、クライアントがDisposeメソッドを2回呼び出しても何も実行しないようにする必要がある。 Finalizeメソッドは,通常の使用をしている限り,1度しか呼ばれません。 # Finalizeメソッド中で再度生存オブジェクトになった場合などが特殊例。 複数呼ばれる可能性があるのはDisposeメソッドの方です。 ただし,通常Disposeメソッドの中でGC.SupressFinalize(Me)を呼び出して,Finalize経由の呼び出しを抑制します。 > Dispseメソッド 2回呼んだらダメ クラスフィールドで回避 Disposeメソッドは複数回呼ばれても安全なように作る必要があります。 > Finalyメソッド 2回呼べ     ・・・対応方法不明・・・ FinalyメソッドがFinalizeメソッドの書き間違いだとして, そもそもFinalizeメソッドはシステムが呼び出す物なので,対応をする必要はありません。

rescue100
質問者

お礼

ありがとうございます。 FinalyメソッドとFinalizeメソッドがあるのですね。 どうも2種類を混合しているようです。 もう一度、本を読み直したいと思います。

関連するQ&A