如何删除类的实例?

时间:2010-06-20 02:02:11

标签: c# class flush

所以,我有这个项目创建一个类的多个实例,并列出它们。

在某些时候,不再需要实例化的类。我怎样才能冲洗它?

到目前为止,它不会发生,即使该类已经无所事事了(如果它只是一个静态类,程序会关闭),它仍然在我的列表中,它的公共变量是仍然可用......

5 个答案:

答案 0 :(得分:4)

为什么要关注它呢?为什么不让.Net Garbage Collection做这件事呢?

您可以实施IDisposable并致电

MyClass.Dispose();

更新:听起来你想要一个只返回活动类的自定义集合而不是列表。创建一个名为MyClassCollection的新类,它实现ICollection并确保它只返回活动类

答案 1 :(得分:4)

您的问题意味着您将这些实例列入某种列表中。从列表中删除不再需要的实例,确保没有任何其他引用。在某些时候,垃圾收集器将收回它们。

答案 2 :(得分:3)

您可以让您的实例引发事件(例如OnInactivated)。当项目添加到列表(子类或封装列表并覆盖Add方法)时,列表类应为此类事件添加处理程序。触发事件时,该列表将从列表中删除该对象。假设该对象未在任何其他列表中引用(也可能正在侦听),则垃圾收集器可以自由处理该对象。

通过这种方式,对象不需要跟踪对自身的所有引用,并且知道如何通知引用持有者释放引用。

这是一个可运行的示例:http://www.coderun.com/ide/?w=Hw83i0wAQkugUif5Oj2lmw

答案 3 :(得分: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);
    }
}

答案 4 :(得分:0)

在不阻止垃圾回收的情况下引用对象的更通用的解决方案是使用WeakReference