您的位置:首页 > 编程语言 > C#

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

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

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方法,目的是“不用户不再使用对象时,要手工调用它”
比如文件打开,数据库访问等。需要及时释放。
明显这个概念和垃圾回收是两个概念。释放后,该对象仍然存在,有待运行环境来回收,见最后一行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: