- PR -

自作クラスのインスタンスの破棄方法

1
投稿者投稿内容
toshi
会議室デビュー日: 2005/05/13
投稿数: 12
投稿日時: 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

以上、よろしくお願いします
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-06-15 12:04
「プログラム終了後・再度プログラムを実行すると、前回登録したデータがのこっており」と言うことはあり得ません。インスタンスの内容をシリアライズしてどこかに保存していない限り、プロセスが異なるのですから、インスタンスも当然別の物のはずです。

Disposeの実装とは、自作クラスのDisposeメソッドを呼び出したと言う意味ですか?それとも自作クラスにDisposeメソッドを作成したと言うことですか?明示的にDisposeメソッドを呼び出さない限り、Disposeが呼び出されるのはガベージコレクタによにってインスタンスが破棄されるときです。またDisposeはクラスの持つリソースを破棄する処理を呼び出すだけで、インスタンスを破棄するわけではありません。

もし、異なるインスタンスにしたいなら、明示的にNewするだけです。たとえグローバルな変数であったとしても、どこかでインスタンスを生成しているはずです。もし新しいインスタンスとして初期化したいなら、新たにNewしてください。
toshi
会議室デビュー日: 2005/05/13
投稿数: 12
投稿日時: 2005-06-15 12:38
甕星さんコメントありがとうございます。

おっしゃるとおり、別の場所にデータが保存されていました・・・

きちんと確認せず、質問してしまい申し訳ありませんでした。

おかげさまで解決することができました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-06-16 20:09
 ところで、PublicやSharedがどの様な効果をもたらすか、理解した上で使用していますよね?
_________________
toshi
会議室デビュー日: 2005/05/13
投稿数: 12
投稿日時: 2005-06-17 09:08
このときまでは、正直きちんと理解できていなかったです^^;
先でかいたソースでは、無駄にShared宣言していましたが今回の機能を実現するうえで特に必要なかったので現在は修正しました。

1

スキルアップ/キャリアアップ(JOB@IT)