首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c# 关于析构函数,该怎么解决

2012-01-31 
c# 关于析构函数classtest{~c(){Console.WriteLine( 已执行析构函数 )}}classProgram{staticvoidMain(s

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模式。


[解决办法]

析构函数是由垃圾回收器控制的.把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。当对象被创建时,构造函数被自动执行。当对象消亡时,析构函数被自动执行。这样就不用担心忘记对象的初始化和清除工作。一般不要定义析构函数,如果要释放非托管资源的话,就让该类继承IDisposable接口,实现Dispose模式。

热点排行