博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#析构函数
阅读量:4287 次
发布时间:2019-05-27

本文共 1375 字,大约阅读时间需要 4 分钟。

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

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

  • 一个类只能有一个析构函数。

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

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

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

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

class Car    {        public int CarID { get; set; }        ~Car()        {            //在析构函数中,可以执行释放其他托管资源处理            Console.WriteLine($"当前Car对象被释放,CarID={CarID}");        }    }

该析构函数隐式地对对象的基类调用 。这样,前面的析构函数代码被隐式地转换为:

protected override void Finalize(){    try    {        // cleanup statements...    }    finally    {        base.Finalize();    }}

这意味着对继承链中的所有实例递归地调用 Finalize 方法(从派生程度最大的到派生程度最小的)。

Note注意

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

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

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

通常,与运行时不进行垃圾回收的编程语言相比,C# 无需太多的内存管理。这是因为 .NET Framework 垃圾回收器会隐式地管理对象的内存分配和释放。但是,当应用程序封装窗口、文件和网络连接这类非托管资源时,应当使用析构函数释放这些资源。当对象符合析构时,垃圾回收器将运行对象的 Finalize 方法。

如果您的应用程序在使用昂贵的外部资源,则还建议您提供一种在垃圾回收器释放对象前显式地释放资源的方式。可通过实现来自  接口的 Dispose 方法来完成这一点,该方法为对象执行必要的清理。这样可大大提高应用程序的性能。即使有这种对资源的显式控制,析构函数也是一种保护措施,可用来在对 Dispose 方法的调用失败时清理资源。

测试代码:

static void TestOne(){    Car car1 = new Car() { CarID = 1 };    //将car1引用设置为空    car1 = null;    //手动调用GC垃圾回收    Console.WriteLine("手动触发垃圾回收>");    GC.Collect(); //释放内存操作,是异步执行的    Console.WriteLine(car1 == null);}
特别说明:

1.静态类GC中提供了强制回收的接口

2.回收操作是异步执行的。

更多:

内容来自:

转载地址:http://wnogi.baihongyu.com/

你可能感兴趣的文章
【win7无法识别u盘的解决办法】
查看>>
【布谷鸟来客提醒V4.0 官方版】淘宝店铺监控软件
查看>>
【教你修复win7下IE8主页被篡改的方法】
查看>>
【维护和保养电脑主机需12点注意】
查看>>
【幸福小助手V3.1绿色版】生活提醒软件
查看>>
【C#如何判断字符串是否为空串】
查看>>
【Linux编译安装httpsqs】
查看>>
【用C#实现启动另一程序的方法】
查看>>
【Android读写文件方法汇总】
查看>>
网线接法大全(RJ45型网线插头)
查看>>
【WinXP自我修复故障功能详解】
查看>>
【23招实用技巧让XP运行更快捷更可靠】
查看>>
【Wn8中如何关闭或开启自动播放功能】
查看>>
【Win7上装双系统完美体验Windows8】
查看>>
【解决Win7缩略图预览功能无法使用问题】
查看>>
【关闭Win7系统自动安装驱动程序功能】
查看>>
【iPod转换精灵V10.2 官方最新版】强大的视频转换功能
查看>>
【Windows编程的25个知识点】
查看>>
【Windows8完美解决强制要求驱动签名】
查看>>
2020年Java面试题总结(一)
查看>>