zoukankan      html  css  js  c++  java
  • C#析构函数与Dispose

    有几种不同的操作方式

    方式一:

    
    
    namespace ConsoleApp1
    {
        class Test
        {
            ~Test()// 析构函数
            {
                Console.WriteLine("~Test()析构函数");
            }
        }
     
        class Program
        {
           
            static void Main(string[] args)
            {
                Test f = new Test();
                f = null;
                GC.Collect();
                Console.WriteLine("读取按键中");
                Console.Read();
                Console.WriteLine("读取到按键");
                Console.WriteLine("程序结束");
     
            }
        }
    }
     

    方式二:

        class Test
        {
            ~Test()// 析构函数
            {
                Console.WriteLine("~Test()析构函数");
            }
        }
    
        class Program
        {
           
            static void Main(string[] args)
            {
                Test f = new Test();
                //f = null;
                GC.Collect();
                Console.WriteLine("读取按键中");
                Console.Read();
                Console.WriteLine("读取到按键");
                Console.WriteLine("程序结束");
    
            }
        }

    方式三:

    class Test:IDisposable
    {
        ~Test()// 析构函数
        {
            Console.WriteLine("~Test()析构函数");
        }
     
        public void Dispose()
        {
            Console.WriteLine("Dispose()");
            GC.SuppressFinalize(this);
            //throw new NotImplementedException();
        }
    }
     
    class Program
    {
       
        static void Main(string[] args)
        {
            using (Test f = new Test())
            {
                
            }
            GC.Collect();
            Console.WriteLine("读取按键中");
            Console.Read();
            Console.WriteLine("读取到按键");
            Console.WriteLine("程序结束");
     
        }
    }

    方式四:

        class Test:IDisposable
        {
            ~Test()// 析构函数
            {
                Console.WriteLine("~Test()析构函数");
            }
    
            public void Dispose()
            {
                Console.WriteLine("Dispose()");//throw new NotImplementedException();
            }
        }
    
        class Program
        {
           
            static void Main(string[] args)
            {
                using (Test f = new Test())
                {
                    
                }
                GC.Collect();
                Console.WriteLine("读取按键中");
                Console.Read();
                Console.WriteLine("读取到按键");
                Console.WriteLine("程序结束");
    
            }
        }

    其它:直接按控制台关闭按钮,是不会调用析构函数的。
    注:SuppressFinalize是取消执行终结器(析构函数)的意思。

  • 相关阅读:
    [转]vc中socket编程步骤
    [转载]使用命名管道实现进程间通信
    换肤软件摘要
    3D 专业词汇 (转)
    如何从 Microsoft DirectShow 筛选器图形获取数据(转)
    “人大艺术学院”“赵雅芝中文网”等网站被挂马 狼人:
    微软将发布5月安全漏洞补丁 修补PPT 狼人:
    专家提醒:网络挂马借“海运女”传播 狼人:
    黑客借“甲型流感”传毒 挂马疾病预防控制中心网站 狼人:
    黑客称攻破乔布斯亚马逊网站账户 欲售相关信息 狼人:
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/8575393.html
Copyright © 2011-2022 走看看