- - PR -
自作クラスのインスタンスの破棄方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-06-15 11:46
いつもお世話になっております。
今日は、自分で作成したクラスのインスタンスを作成後、プログラムの終了の際にインスタンスを破棄する方法を知りたく質問いたします。 現在作成しているプログラムで、自作クラスをフォームのメンバ変数として宣言し、データの格納や読み取りに利用しているのですが、プログラム終了後・再度プログラムを実行すると、前回登録したデータがのこっており読み込まれてしまいます。 クラスの解放手続きや破棄などをおこなっていなかったのと、ローカルでなくメンバ変数として定義したのでインスタンスがそのままのこっているみたいです。 自分で解決策としてクラスへDisposeの実装や、Finalizeの実装をこころみているのですがうまく実装できません。 どなたか、解決方法なやアドバイスがありましたらご教授お願いいたします。 自作クラス: Public Class clsDate strName As String strZipCode as string strAddress as string public Sub New() End sub End Class メインフォーム Public Class frmMain Inherits System.Windows.Forms.UserControl 'メンバ変数 Public Shared m_Date as clsDate 以上、よろしくお願いします |
|
投稿日時: 2005-06-15 12:04
「プログラム終了後・再度プログラムを実行すると、前回登録したデータがのこっており」と言うことはあり得ません。インスタンスの内容をシリアライズしてどこかに保存していない限り、プロセスが異なるのですから、インスタンスも当然別の物のはずです。
Disposeの実装とは、自作クラスのDisposeメソッドを呼び出したと言う意味ですか?それとも自作クラスにDisposeメソッドを作成したと言うことですか?明示的にDisposeメソッドを呼び出さない限り、Disposeが呼び出されるのはガベージコレクタによにってインスタンスが破棄されるときです。またDisposeはクラスの持つリソースを破棄する処理を呼び出すだけで、インスタンスを破棄するわけではありません。 もし、異なるインスタンスにしたいなら、明示的にNewするだけです。たとえグローバルな変数であったとしても、どこかでインスタンスを生成しているはずです。もし新しいインスタンスとして初期化したいなら、新たにNewしてください。 |
|
投稿日時: 2005-06-15 12:38
甕星さんコメントありがとうございます。
おっしゃるとおり、別の場所にデータが保存されていました・・・ きちんと確認せず、質問してしまい申し訳ありませんでした。 おかげさまで解決することができました。 |
|
投稿日時: 2005-06-16 20:09
ところで、PublicやSharedがどの様な効果をもたらすか、理解した上で使用していますよね?
_________________ |
|
投稿日時: 2005-06-17 09:08
このときまでは、正直きちんと理解できていなかったです^^;
先でかいたソースでは、無駄にShared宣言していましたが今回の機能を実現するうえで特に必要なかったので現在は修正しました。 |
1