- - PR -
インスタンス開放のタイミングについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-11-22 10:43
もっとはっきりとやりたい事を書かれたほうが良いと思います。
イオンさんが言っている「破棄」や「生存期間」は、多分見ている人は違う意味で受け取ってしまうでしょう。 Unload とは一体何の Unload ですか?フォーム?コントロール?アプリケーションドメイン? _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2005-11-22 10:58
目的はそのクラスの生存期間の最後にある処理をしたいと考えています。
1.インスタンスがたったタイミングでまず初期処理(初期化などです。) 2.処理あれこれ・・ 3.最後に終了処理 こんなながれを考えています。 1に関してはNewを使用することでインスタンスをたてる側はまったく意識せずに そのクラスを使用することが出来ると思います。 3に関しても同じようにしたいというのが目的です。 終了しょりをインスタンスを立てた側で実行(try finallryなど何でもいいです。)すれば 全く問題ないのですが、できればその終了処理を意識することなく使わせてあげたいと 考えていました。 具体的にはトランザクションです。トランザクション管理を全く使う側に意識させずに、 そのクラスの生存期間内で更新だけしてくだいさいと。 いつそのクラスを使ってる側で更新が終了したかが判断できれば良いのですが、 その判断はクラスの生存期間で判断できないかと考えていました。 他に良い方法があればぜひ教えてください、お願いします | ||||
|
投稿日時: 2005-11-22 11:00
スコープを抜けたりして、インスタンスがすべての参照を失う時を捕まえたいわけですよね? であれば、できないです。 .NET のランタイムは「それ」を管理していません。 Unload() のようなメソッドを用意して「必ずそれを呼び出す」ように運用するか、IDisposable.Dispose() を実装して using 句で「それらしく」見せかけるくらいしか道はないと思います。(後者は本来の目的と大分異なるので勧めませんが) | ||||
|
投稿日時: 2005-11-22 11:06
C++ であれば、スタックにおかれたインスタンスは、スコープから外れた時点でデストラクタが必ず呼ばれるので、終了処理はそこで書きますね。
ヒープにおかれたインスタンスは、delete された時点でデストラクタが呼ばれますね。 つまりデストラクタが呼ばれるタイミングが保障されるので、そのクラスの終了処理はデストラクタに書きます。 .NET はガベージコレクションのおかげでメモリ管理をしなくてすみましたが、インスタンスが「破棄」されるタイミングが分かりません。では終了処理はどうするのか。 Dispose() に書く、というのがそうです。 C# であれば構文レベルで Dispose の呼び出しがサポートされています。(using)(VB.NET も 2005 からサポート) 例えば、SqlConnection なんかは、Dispose() (Close())されると、保留中のトランザクションはロールバックされます。 _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2005-11-22 11:11
実際そのクラス (ラッパ クラスかな?) がどのような機能を提供しているのか判りませんが、 更新メソッド呼び出すたびに、暗黙的に Open / Close するんですか? (^^;) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-11-22 11:11
このへんは意識してやるように設計されています。 なのでそれに従うべきだと思います。 _________________ たつごろー codeseek こみゅぷらす | ||||
|
投稿日時: 2005-11-22 13:45
>更新メソッド呼び出すたびに、暗黙的に Open / Close するんですか?
暗黙的という分けではないのですが、その更新メソッド内でのみトランザションを 完結(表現は変ですが・・)させたいといことです。 その際にトラザクション管理は、そのクラスの内部でやるから、 更新する側(インスタンスを立てて更新機能のみ使う側)では、トランザクションは 気にしなくていいよという作りにできないかと。 でもやはり限界はあるようですね。 ありがとうございました!! | ||||
|
投稿日時: 2005-11-22 15:09
こんなんとか。 _________________ 囚人のジレンマな日々 |