DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Finalizeが実行されない場合

環境/言語:[Win2000 VB.NET 1.1]
分類:[.NET]

例えは
Public Class xx
Shared Sub New() or Private Sub New()
End Sub
Shared Sub YY()
End Sub
Protected Overrides Sub Finalize()
End Sub
End Class

の場合、Shared Sub New()は実行されるけど、Finalizeは実行されない
Private Sub New()の場合で、Sub YY()をCallしたとしても、Finalizeは実行されない
と思うんですが、
そう理解して良いでしょうか。
2004/09/20(Mon) 19:08:19 編集(投稿者)

■No6245に返信(DEGさんの記事)
> 例えは
> Public Class xx
> Shared Sub New() or Private Sub New()
> End Sub
> Shared Sub YY()
> End Sub
> Protected Overrides Sub Finalize()
> End Sub
> End Class
>
> の場合、Shared Sub New()は実行されるけど、Finalizeは実行されない
> Private Sub New()の場合で、Sub YY()をCallしたとしても、Finalizeは実行されない
> と思うんですが、
> そう理解して良いでしょうか。

何度か質問を読み返したのですが、何をお聞きになりたいのかよくわかりません(^^;

Shared Sub New()はShared変数の初期化処理を行う共有コンストラクタで、
インスタンスのコンストラクタであるSub Newとは関係ありません。
また、Private Sub New()となぜにPrivateなのでしょう?
このままだとクラスxxはインスタンス化できないのでSharedなメソッドでインスタンス化する
シングルトンパターンの場合の何かの話をされたいのでしょうか?
Finalizeメソッドはそのインスタンスがガベージコレクトされるときに基本的に呼ばれます。

で、質問文の下記の部分なんですが、

> の場合、Shared Sub New()は実行されるけど、Finalizeは実行されない
>Private Sub New()の場合で、Sub YY()をCallしたとしても、Finalizeは実行されない
> と思うんですが、

おっしゃっていることは間違っていないと思いますが、
そもそもShared Sub New()/Private Sub New()/Sub YY()/Finalizeのどれも
特に関連がないので、疑問に思われているポイントがわかりませんでした。
■No6246に返信(よねKENさんの記事)
> 何度か質問を読み返したのですが、何をお聞きになりたいのかよくわかりません(^^;

質問の仕方が悪かったようで失礼しました。

安易にFinalize()でリソースを解放すればよいと思ってても
前述のケースでは、そうはいかないのではないか

みたいなことを、確認したかったのです


> おっしゃっていることは間違っていないと思いますが、

いいかえると、
Private Sub New()の場合や、Shared Sub YY()しか呼ばない場合は
インスタンスが作成されないから、カベージコレクションの対象外になる
ことを確認したかったのですが、それでよかったようですね

どうもありがとうございました。
解決済み!
>>おっしゃっていることは間違っていないと思いますが、
>
> いいかえると、
> Private Sub New()の場合や、Shared Sub YY()しか呼ばない場合は
> インスタンスが作成されないから、カベージコレクションの対象外になる
> ことを確認したかったのですが、それでよかったようですね

Private Sub Newでもそれによってインスタンスを生成すれば、
最終的にそのインスタンスはガベージコレクションの対象になります。

ひょっとして質問意図は、例えば、
Shared Sub YY()
End Sub
の中でリソースを使うような処理を書いていた場合、
そのリソースの解放のためにFinalizeメソッドを利用できるか?
ということでしょうか?

そういう意味なら、YYメソッド内でリソースの取得、処理、リソースの解放まで
すべて記述しましょう。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板