欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-29 11:44:10
c# 的析构以及垃圾回收实例分析 看书时,自己写的例子代码,了解到几个知识点,记载下来。同时发现自己手写代码的能力比较弱,还是得多写一下。 using syst...

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方法,目的是“不用户不再使用对象时,要手工调用它”
比如文件打开,数据库访问等。需要及时释放。

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

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