c# 关于析构函数
class   test 
             { 
                         ~c() 
                         { 
                                     Console.WriteLine( "已执行析构函数 "); 
                         } 
             }     
 class   Program 
             { 
                         static   void   Main(string[]   args) 
                         { 
                                     while   (true) 
                                     { 
                                                 test   a   =   new   c(); 
                                     }                            
                         } 
             }     
 --------------------   
 析构函数不能被程序员调用,那写析构函数有什么用途?   
 上面这个程序运行的时候,内存不会增加太快; 
 但是按了pausebreak之后,使用的内存就增加很快。 
 为什么?
------解决方案--------------------这样子写 
  using (test a = new c()) 
                 {                       
                 }   
 你就能看到析构函数了。
------解决方案--------------------把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。当对象被创建时,构造函数被自动执行。当对象消亡时,析构函数被自动执行。这样就不用担心忘记对象的初始化和清除工作。   
  析构函数是由垃圾回收器控制的.
------解决方案--------------------Dispose(); 也会引发析构
------解决方案--------------------程序员也可以强制引发
------解决方案--------------------析构函数会被CLR调用
------解决方案--------------------自动引发的
------解决方案--------------------不要和非托管的C++类的析构函数等同.   
 在.NET下析构函数不会立刻执行,只有等.NET在适当的时候才会对不再使用的对象进行回收而调用它的析构函数.   
------解决方案--------------------一般的情况下并不用在c# 中写析构函数,因为C#是由CLR来进行内存垃圾自动回收的。 
 因为c#中同时存在unsafe的非托管模式,所以保留了析构函数,但是如果是在托管环境中,一般都不会写析构函数。
------解决方案--------------------那在c#里面里写析构函数有什么用? 
 ---------------------- 
 主要用来释放非托管的资源。
------解决方案--------------------假如我在析构函数里面写了一条代码,例如 
 class test 
     { 
         ~c() 
         { 
             Console.WriteLine( "已执行析构函数 "); 
         } 
     } 
 这条代码会对析构函数的功能造成什么影响吗?   
 ----------------------- 
 我认为不会
------解决方案--------------------假如我在析构函数里面写了一条代码,例如 
 class test 
     { 
         ~c() 
         { 
             Console.WriteLine( "已执行析构函数 "); 
         } 
     } 
 这条代码会对析构函数的功能造成什么影响吗? 
 ------------------------------- 
 析构函数并不是一个公有方法,CLR在不可预知的时间内会自动调用该函数,有析构函数的对象new的时候需要做更多的工作,CLR执行析构函数也会损伤应用程序的性能。一般不要定义析构函数,如果要释放非托管资源的话,就让该类继承IDisposable接口,实现Dispose模式。