查看: 2286|回复: 0

[.NET开发] C# 的析构以及垃圾回收实例分析

发表于 2018-2-9 08:00:00

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

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

  1. using System;
  2. namespace ConsoleApplication
  3. {
  4. public class Program
  5. {
  6. public static void Main(string[] args)
  7. {
  8. Console.WriteLine("Hello World!");
  9. fun();
  10. GC.Collect(); //4、若不显式回收,则控制台不打印回收行。
  11. Console.WriteLine("end!");
  12. }
  13. public static void fun(){ //1、此处必须有static
  14. A a=new A();
  15. a.Dispose();
  16. //GC.Collect(); //3、此处回收无效,因为a还没释放
  17. }
  18. public class A:IDisposable{
  19. /* protected override void Finalize(){ //2、析构实际是重载Finalize,但不能直接写重载。编译器自动重写Finalize,所以代码中,只能用 析构函数。
  20. Console.WriteLine("some one disposed!");
  21. }*/
  22. ~A(){
  23. Console.WriteLine("some one Finalize!");
  24. }
  25. public void Dispose(){
  26. Console.WriteLine("some one disposed!");
  27. }
  28. }
  29. }
  30. }
复制代码

1、该代码的输出为:

  1. Hello World!
  2. some one disposed!
  3. end!
  4. some one Finalize!
复制代码

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

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

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

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

您可能感兴趣的文章:

  • 全面解读C#编程中的析构函数用法
  • C#中析构函数、Dispose、Close方法的区别
  • C#中构造函数和析构函数用法实例详解
  • C#学习笔记整理_深入剖析构造函数、析构函数


回复

使用道具 举报