C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 28 を表示中)
■12658 / )  Re[1]: C# のfinalize?
□投稿者/ Azulean (8回)-(2008/01/14(Mon) 12:11:00)
> C#のデストラクタは宣言してるだけでもfinalize?だかを書いてるのと同じとあったんですが
> どういうことなんでしょうか。
.NET Frameworkではリソース解放の手段として、IDisposable.DisposeとObject.Finalizeの2種類があります。
しかし、C#ではObject.Finalizeをオーバーライドすることができないこととなっています。
その代わり、デストラクタを書くことで、Object.Finalizeをオーバーライドすることと同じ効果が得られるとされています。

イメージ(実際にはオーバーライドできない)
protected override void Finalize()
{
 ~HogeHoge();
}

~HogeHoge()
{
 //TODO:
}

> 常にクラスにはデストラクタを宣言だけしとくとなにか恩恵があったりするんでしょうか?
> 呼び出しを指定できないのでリソースの解放はしないほうがいいのならほかいつつかうんでしょうか
デストラクタは不必要に書いてはいけません。
リソース解放が必須でないクラスでデストラクタ(ファイナライザ)を書くと、オブジェクトの解放が遅くなる仕組みがあります。
基本的にはIDisposableを実装し、Disposeメソッドで解放すべきですが、それを忘れていたときの対策として実装するものと認識しています。
(実装テンプレートは前述のURLが参考になると思います)

具体的な内容は次のサイトをお読み下さい。
http://www.microsoft.com/japan/msdn/net/mag00/GCI.aspx
返信 編集キー/


管理者用

- Child Tree -