using System;
//终结器Finalize方法用来确保当对象被垃圾收集器收集时,对象所包装的本地资源得到释放(或关闭),
//因为它可以确保托管对象在释放内存的同时不会泄漏本地资源,或者强制执行一些操作。
//但终结器是非确定性的,不能确定它何时会被调用。
//终结器被垃圾回收器非确定性地调用,是一个保护的虚方法,不能显示调用它。
//这意味着被托管类型包装的非托管资源,例如文件、数据库连接、位图和设备,可能不会以一种及时的方式释放。
//非托管资源的延迟释放可能会对该应用程序或可能的其它应用程序产生副作用。
//C#编译器所提供的Finalize方法包含一个try.....finally...
//try模块包含该析构函数/终结器的代码,finally模块包含指定基类的Finalize方法。
//这意味着开发人员不应该试图直接调用基类的析构函数,出现的Finalize方法会自动承担这一责任。
//在一个终结器中访问托管对象是不合理的,因为垃圾回收是不可确定,而且该对象可能已经不复存在了。
namespace Donis.CSharpBook
{
public class Starter
{
public static void Main()
{
XClass obj=new XClass();
}
}
public class ZClass
{
~ZClass()
{
Console.WriteLine("ZClass d'tor");
}
}
public class YClass: ZClass
{
~YClass()
{
Console.WriteLine("YClass d'tor");
}
}
public class XClass: YClass
{
~XClass()
{
Console.WriteLine("XClass d'tor");
throw new Exception("D'tor exception");
}
}
}