C#析构函数(destructor)和终结器(Finalizer)

本文介绍了C#中的析构函数和Object.Finalize方法,讲解了析构函数的使用规则和注意事项,强调了析构函数在垃圾回收中的作用,以及Finalize方法在释放非托管资源中的角色。建议使用析构函数配合IDisposable接口进行资源显式释放,以提高性能。
摘要由CSDN通过智能技术生成

http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif使用析构函数释放资源

析构函数用于析构类的实例。

1)         不能在结构中定义析构函数。只能对类使用析构函数。

2)         一个类只能有一个析构函数。

3)         无法继承或重载析构函数。

4)         无法调用析构函数。它们是被自动调用的。

5)         析构函数既没有修饰符,也没有参数。

例如,下面是类 Car 的析构函数的声明:

class Car
{
    /// <summary>
    /// 析构函数
    /// </summary>
    ~Car()
    {
        // cleanup statements...     
    }
}
该析构函数隐式地调用对象基类的  Finalize 。这样,该析构函数被隐式地转换为如下代码:

protected override void Finalize()  
{  
    try
    {
        // Cleanup statements...   
    }     
    finally 
    {
        base.Finalize();  
    }
} 
这意味着对继承链中的所有实例递归地调用  Finalize  方法。

说明:不要使用空的析构函数。如果类包含析构函数,则 Finalize  队列中则会创建一个项。当调用析构函数时,将调用垃圾回收器(GC)来处理该队列。如果析构函数为空,只会导致不必要的性能损失。

程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的。垃圾回收器检查是否存在应用程序不再使用的对象。如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有的话),回收该对象的内存。程序退出时也会调用析构函数。

可以通过调用 Collect 强制进行垃圾回收,但大多数情况下应避免这样做,因为会导致性能问题。

通常,.NET Framework 垃圾回收器会隐式地管理对象的内存分配和释放。但当应用程序封装窗口、文件和网络连接这类非托管资源时,应使用析构函数释放这些资源。当对象符合析构时,垃圾回收器将运行对象的 Finalize 方法。

虽然垃圾回收器可以跟踪封装非托管

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值