在对象被处置时做某事

时间:2013-12-08 12:20:28

标签: c#

考虑以下课程:

public class SomeObject
{
        public string x { get; set; }
        public int y { get; set; }

        private void Serialize(){}
        //When the object gets collected by the GC want to call the Serialize() function
}

我应该为此目的使用什么事件?

我想在GC收集对象或应用程序关闭时调用该函数,但我想从类内部执行此操作

3 个答案:

答案 0 :(得分:4)

如果您确实需要在收集对象时执行某些操作,那么您将使用Finalize method

通常情况下,Finalizer方法仅用作未正确处理对象的备份,以尝试消除大部分混乱。

无法保证Finalizer方法实际上是针对所有对象执行的,因此它不是清除对象的可靠方法。当应用程序结束时,垃圾收集器花费一些时间来收集对象并为实现它的那些人运行Finalize methots,但是如果该过程花费的时间太长,它将放弃其余的对象并让应用程序关闭。

如果某个对象在不再使用时需要执行某些操作,则应实现IDisposable interface。但请注意,它并不意味着对象会自动执行任何操作,程序员有责任使用该对象正确处理它。

答案 1 :(得分:2)

你能否在析构函数中调用Serialize()方法:

public class SomeObject
{
    public string x { get; set; }
    public int y { get; set; }

    private void Serialize(){}

    ~SomeObject() {
      Serialize();
    }

}

答案 2 :(得分:0)

公共覆盖OnDispose。但是你的班级必须为此实现IDisposable。