GC.SuppressFinalize()

作者:追风剑情 发布于:2018-1-23 16:49 分类:C#

示例

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Test9
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. Test t = new Test();
  14. using (t)
  15. {
  16. Console.WriteLine("using");
  17. }//离开using会自动调用Dispose()
  18. Console.WriteLine("end");
  19. Console.Read();
  20. }
  21. }
  22.  
  23. public class Test : IDisposable
  24. {
  25. protected bool disposed;
  26.  
  27. public void Dispose()
  28. {
  29. Console.WriteLine("Dispose()");
  30. //这里手动释放所有资源(托管资源、非托管资源)
  31. Dispose(true);
  32. //告诉GC,销毁此对象时不要再调用终结器方法.因为资源已经在上面手动释放(托管资源、非托管资源)了.
  33. GC.SuppressFinalize(this);
  34. }
  35.  
  36. public virtual void Dispose(bool disposeManagedResources)
  37. {
  38. if (!disposed)
  39. {
  40. if (disposeManagedResources)
  41. {
  42. //TODO:: 释放拖管资源
  43.  
  44. }
  45. //TODO:: 释放非托管资源
  46.  
  47. disposed = true;
  48. }
  49. }
  50.  
  51. //终结器方法(用来释放非托管资源)
  52. ~Test()
  53. {
  54. Console.WriteLine("Finalize");
  55. Dispose(false);
  56. }
  57. }
  58. }

运行测试

99999.jpg

标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号