ana*_*kic 17 .net c# destructor
如果应用程序崩溃,是否会调用析构函数?如果它是一个未处理的异常,我猜它确实存在,但是更严重的错误,或者类似用户杀死应用程序进程的事情呢?
还有一些可能是愚蠢的问题:
Han*_*ant 23
我鼓励你自己尝试一下.例如:
using System;
class Program {
static void Main(string[] args) {
var t = new Test();
throw new Exception("kaboom");
}
}
class Test {
~Test() { Console.WriteLine("finalizer called"); }
}
Run Code Online (Sandbox Code Playgroud)
在命令提示符下运行此命令,以便您可以看到最后一次喘息.首先将throw语句注释掉.
与Windows中任何未处理的异常一样,Windows提供的默认异常过滤器调用WerFault.exe显示的Windows错误报告对话框.如果单击"关闭程序",WerFault将使用TerminateProcess()来终止该程序.这是一个快速结束,没有机会运行终结器线程,就像程序正常退出时一样.
Windows然后负责清理弹片.它会自动关闭程序可能已打开的任何操作系统句柄,但没有机会在终结器中关闭.文件是这里比较棘手的问题,它们的缓冲区不会被刷新,你很容易在磁盘上找到部分写入的文件.
| 归档时间: |
|
| 查看次数: |
4195 次 |
| 最近记录: |