考虑以下课程:
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收集对象或应用程序关闭时调用该函数,但我想从类内部执行此操作
答案 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。