好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C# 的析构以及垃圾回收实例分析

C# 的析构以及垃圾回收实例分析

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

?

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!" );

       }

     }

   }

}

1、该代码的输出为:

?

Hello World!                                        

some one disposed!                                      

end!                                             

some one Finalize!

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

2、IDisposable接口的Dispose方法,目的是[不用户不再使用对象时,要手工调用它]
比如文件打开,数据库访问等。需要及时释放。

明显这个概念和垃圾回收是两个概念 。释放后,该对象仍然存在,有待运行环境来回收,见最后一行。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:https://my.oschina.net/u/1540190/blog/734409

dy("nrwz");

查看更多关于C# 的析构以及垃圾回收实例分析的详细内容...

  阅读:47次