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

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

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

Re[2]: C# のfinalize?


(過去ログ 28 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■12650 / inTopicNo.1)  C# のfinalize?
  
□投稿者/ 鬱手前 (1回)-(2008/01/14(Mon) 01:01:43)

分類:[C#] 

C#のデストラクタは宣言してるだけでもfinalize?だかを書いてるのと同じとあったんですが
どういうことなんでしょうか。
常にクラスにはデストラクタを宣言だけしとくとなにか恩恵があったりするんでしょうか?
呼び出しを指定できないのでリソースの解放はしないほうがいいのならほかいつつかうんでしょうか

どの様なものなのかがよくわかりません。お願いします

ごめんなさい。鬱ぽくて頭いつも以上に回らず質問内容もつたえきれてないかも。
引用返信 編集キー/
■12653 / inTopicNo.2)  Re[1]: C# のfinalize?
□投稿者/ かずき (15回)-(2008/01/14(Mon) 02:21:34)
かずき さんの Web サイト
実装するなら↓みたいに実装かなぁ。
http://d.hatena.ne.jp/okazuki/20070526/1180152665

アンマネージドなリソースの開放のための最後の砦的なものかも。

引用返信 編集キー/
■12658 / inTopicNo.3)  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
引用返信 編集キー/
■12901 / inTopicNo.4)  Re[2]: C# のfinalize?
□投稿者/ 鬱手前 (5回)-(2008/01/20(Sun) 16:53:12)
No12658 (Azulean さん) に返信
>>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

参考になりました。有難う御座います。精進していきたくおもいます
引用返信 編集キー/
■12956 / inTopicNo.5)  Re[1]: C# のfinalize?
□投稿者/ Jitta (447回)-(2008/01/21(Mon) 22:03:17)
No12650 (鬱手前 さん) に返信
> ごめんなさい。鬱ぽくて頭いつも以上に回らず質問内容もつたえきれてないかも。

そう思うなら、神経内科へ行って診断してもらって、できるなら診断書もらって休む。
あなたが休むことで会社が受けるダメージと、あなたが自殺することで会社が受けるダメージと、どちらが大きいか、会社に選ばせること。

 また、鬱らしきことを、会社に対して交渉の材料にしてもいいけど、コミュニティに対しての材料にしないこと。
私らだって、同じなんだ。
引用返信 編集キー/
■12959 / inTopicNo.6)  Re[2]: C# のfinalize?
□投稿者/ れい (373回)-(2008/01/21(Mon) 23:47:38)
No12956 (Jitta さん) に返信
>  また、鬱らしきことを、会社に対して交渉の材料にしてもいいけど、コミュニティに対しての材料にしないこと。
> 私らだって、同じなんだ。

このコミュニティが鬱手前さんの病状に関してなんら責任が無いのは当然ですから、
それを持ち出してくることに不快感・甘えを感じるのは当たり前です。

そういった甘えに対し、手間隙かけて厳しい言葉をかけるのは
Jittaさんなりのやさしさであろうと思いますが、
鬱というのはそういった状況判断もできなくなる病気です。

Jittaさんの言葉に対し、信じられないような曲解をする可能性もあります。
その曲解によって、どのような結果になるのかわかりません。
どんな結果になってもJittaさんに法的責任は何も発生しないでしょうが、
結果によっては精神的責任・社会的責任が発生する可能性があります。

顔の見えない誰かに対して、
そういった責任を取れるほどに覚悟・やさしさがあるのであれば、
ここで甘えを弾劾する時間を、
鬱病やそのケアに対し理解することに費やしたほうが
Jittaさん自身のためにも、社会のためにも、よいと思います。

そういった責任をとるほどの覚悟がないなら、
黙するのが正解だと思います。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -