前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c# 的析构以及垃圾回收2、3事!

c# 的析构以及垃圾回收2、3事!

作者头像
申君健
发布2018-09-21 15:30:35
2460
发布2018-09-21 15:30:35
举报
文章被收录于专栏:前端侠2.0前端侠2.0前端侠2.0

看书时,自己写的例子代码,了解到几个知识点,记载下来。同时发现自己手写代码的能力比较弱,还是得多写一下。

using System;
namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            fun();
            GC.Collect();                               //4、若不显式回收,则控制台不打印回收行。
            Console.WriteLine("end!");
        }
        public static void  fun(){                        //1、此处必须有static
            A a=new A();
            a.Dispose();
            //GC.Collect();                              //3、此处回收无效,因为a还没释放
        }
        public class A:IDisposable{
          /*  protected override void Finalize(){         //2、析构实际是重载Finalize,但不能直接写重载。编译器自动重写Finalize,所以代码中,只能用  析构函数。       
                 Console.WriteLine("some one disposed!");
            }*/
             ~A(){
                 Console.WriteLine("some one Finalize!");
            }
            public void Dispose(){
                 Console.WriteLine("some one disposed!");
            }
        }
    }
}

5、该代码的输出为:

Hello World!                                                                                 
some one disposed!                                                                              
end!                                                                                            
some one Finalize!  

这个回收像极了异步调用! 

6、IDisposable接口的Dispose方法,目的是“不用户不再使用对象时,要手工调用它” 比如文件打开,数据库访问等。需要及时释放。 明显这个概念和垃圾回收是两个概念。释放后,该对象仍然存在,有待运行环境来回收,见最后一行。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/08/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档