したがって、クラスの複数のインスタンスを作成し、それらを一覧表示するこのプロジェクトがあります。
ある時点で、インスタンス化されたクラスはもう必要ありません。どうすればフラッシュできますか?
これまでのところ、クラスがもう何の関係もない場合でも(単一の静的クラスだった場合、プログラムはシャットダウンされていたはずです)、それはまだ私のリストにあり、そのパブリック変数は引き続き使用可能です。 ..
なぜそれをフラッシュする心配ですか?.Netガベージコレクションに任せてみませんか?
または、 IDisposableを実装して、
MyClass.Dispose();
更新:アクティブなクラスのみを返す、リストではなくカスタムコレクションが必要なようです。ICollectionを実装するMyClassCollectionという新しいクラスを作成し、アクティブなクラスのみを返すようにします
あなたの質問は、ある種のリストにこれらのインスタンスがあることを意味します。不要になったインスタンスをリストから削除し、それらへの他の参照がないことを確認します。ある時点で、ガベージコレクターはそれらを再利用します。
インスタンスにイベントを発生させることができます(たとえば、OnInactivate)。リストクラスは、アイテムがリストに追加されるときに、そのようなイベントのハンドラーを追加する必要があります(リストをサブクラス化またはカプセル化し、Addメソッドをオーバーライドします)。イベントが発生すると、オブジェクトはリストによってリストから削除されます。オブジェクトが他のリスト(リッスンしている可能性もあります)で参照されていないと仮定すると、ガベージコレクターはオブジェクトを自由に処理できます。
このように、オブジェクトはそれ自体へのすべての参照を追跡する必要はなく、参照を解放するように参照所有者に通知する方法を知っています。
実行可能な例を次に示します。http://www.coderun.com/ide/? w = Hw83i0wAQkugUif5Oj2lmw
うまくいけば何が起こるべきかを説明する例:
public class MyClass {
public string MyString { get; private set; }
public int MyInt { get; private set; }
public double MyDouble { get; private set; }
public MyClass(string myString, int myInt, double myDouble){
MyString = myString;
MyInt = myInt;
MyDouble = myDouble;
}
}
public class SomeOtherClass{
public List<MyClass> m_Instances = new List<MyClass>();
public void FillList(){
//Instantiate 3 items, and add to the list
m_Instances.Add(new MyClass("1", 2, 3d));
m_Instances.Add(new MyClass("4", 5, 6d));
m_Instances.Add(new MyClass("7", 8, 9d));
}
public void RemoveFirst(){
//Remove the first one. As long as the removed item has no
//other instances, the Garbage Collector will (in its own time)
//destroy that unused object, and reclaim the memory.
m_Instances.RemoveAt(0);
}
}
ガベージコレクションを妨げずにオブジェクトを参照するためのより一般的な解決策は、WeakReferenceを使用することです。