3

したがって、クラスの複数のインスタンスを作成し、それらを一覧表示するこのプロジェクトがあります。

ある時点で、インスタンス化されたクラスはもう必要ありません。どうすればフラッシュできますか?

これまでのところ、クラスがもう何の関係もない場合でも(単一の静的クラスだった場合、プログラムはシャットダウンされていたはずです)、それはまだ私のリストにあり、そのパブリック変数は引き続き使用可能です。 ..

4

5 に答える 5

4

なぜそれをフラッシュする心配ですか?.Netガベージコレクションに任せてみませんか?

または、 IDisposableを実装して、

MyClass.Dispose();

更新:アクティブなクラスのみを返す、リストではなくカスタムコレクションが必要なようです。ICollectionを実装するMyClassCollectionという新しいクラスを作成し、アクティブなクラスのみを返すようにします

于 2010-06-20T02:05:53.483 に答える
4

あなたの質問は、ある種のリストにこれらのインスタンスがあることを意味します。不要になったインスタンスをリストから削除し、それらへの他の参照がないことを確認します。ある時点で、ガベージコレクターはそれらを再利用します。

于 2010-06-20T02:07:43.183 に答える
3

インスタンスにイベントを発生させることができます(たとえば、OnInactivate)。リストクラスは、アイテムがリストに追加されるときに、そのようなイベントのハンドラーを追加する必要があります(リストをサブクラス化またはカプセル化し、Addメソッドをオーバーライドします)。イベントが発生すると、オブジェクトはリストによってリストから削除されます。オブジェクトが他のリスト(リッスンしている可能性もあります)で参照されていないと仮定すると、ガベージコレクターはオブジェクトを自由に処理できます。

このように、オブジェクトはそれ自体へのすべての参照を追跡する必要はなく、参照を解放するように参照所有者に通知する方法を知っています。

実行可能な例を次に示します。http://www.coderun.com/ide/? w = Hw83i0wAQkugUif5Oj2lmw

于 2010-06-20T02:18:26.903 に答える
2

うまくいけば何が起こるべきかを説明する例:

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);
    }
}
于 2010-06-20T02:24:09.753 に答える
0

ガベージコレクションを妨げずにオブジェクトを参照するためのより一般的な解決策は、WeakReferenceを使用することです。

于 2010-06-20T17:33:07.600 に答える