内容:我在C#中自己写了一个类,没有从任何系统类继承,在new之后如何delete掉呢??

时间:2022-07-29 19:27:34
内容:我在C#中自己写了一个类,没有从任何系统类继承,在new之后如何delete掉呢??

10 个解决方案

#1


yourclass=null;

#2


.NET的自动垃圾回收功能可以自行解决,不过C#中的类也支持析构函数,并在其中调用一些善后处理,只是在自动垃圾回收时才会调用,并且你不知道它在什么时候回收。

#3


.NET的自动垃圾回收功能可以自行解决,不过C#中的类也支持析构函数,并在其中调用一些善后处理,只是在自动垃圾回收时才会调用,并且你不知道它在什么时候回收。

#4


请注意,自己写的类,表面上没有从任何类继承,其实仍然从object中派生的。

可以写自己的类析构,或者

cls_YourClass=null;

不过,在类过了自己的使用域时候会被.NET自动清理回收。

#5


VC#不需要单独写了,它会自动收回的。VC++的程序员注意一下。

#6


不用delete,自动回收
如果想自己释放就重载类的dispose()方法

#7


对上面的兄弟们说的对呀!
这就是C#的一大好处呀!

#8


一般情况下不用考虑对象的释放问题。但是C#的GC并不是在对象超出使用区域,或不再被使用时立即将对象占用的内存释放。
而且,如果在对象中使用的外部资源,如在构造函数中打开了文件,或建立了数据库连接,这种类必须实现IDispose接口,并且实现Dispose方法是释放占用的资源。这种类在对象在不再被使用的时候需要调用他的Dispose方法,或者如下使用:
using ( MyClass aClass ) //MyClass中使用了资源
{
    ......//使用aClass
}

出了using域后,using参数中列出的所有对象将被调用Dispose方法

#9


更正一下

using ( MyClass aClass = new MyClass() ) //MyClass中使用了资源
{
    ......//使用aClass
}

#10


1. 如果你的类对象引用了需要显示释放的系统资源(比如文件句炳),那么你首先要做的事情是实现类的Finalizer函数,GC在回收你的类对象占用的内存之前会调用这个函数。在C#里,其语法与C++的析够函数相同,~YourClassName()。

2. Finalizer/GC的缺点是调用时间不确定,GC只有在特定的条件下才进行,而在Finalizer调用之前,系统资源仍然会处于被占用的状态。

3. 你可以为类的用户提供可以显示释放资源的方法,IDispose接口,但那只是Finalizer的补充,如果用户没有调用Dispose,Finalizer一样有责任完成清理工作。

4. C#特别提供了using statement支持IDispose接口。

5. 如果没有重要的系统资源或者其他充分的理由,不要实现Finalizer和IDispose,因为Finalizer会影响系统的性能。

#1


yourclass=null;

#2


.NET的自动垃圾回收功能可以自行解决,不过C#中的类也支持析构函数,并在其中调用一些善后处理,只是在自动垃圾回收时才会调用,并且你不知道它在什么时候回收。

#3


.NET的自动垃圾回收功能可以自行解决,不过C#中的类也支持析构函数,并在其中调用一些善后处理,只是在自动垃圾回收时才会调用,并且你不知道它在什么时候回收。

#4


请注意,自己写的类,表面上没有从任何类继承,其实仍然从object中派生的。

可以写自己的类析构,或者

cls_YourClass=null;

不过,在类过了自己的使用域时候会被.NET自动清理回收。

#5


VC#不需要单独写了,它会自动收回的。VC++的程序员注意一下。

#6


不用delete,自动回收
如果想自己释放就重载类的dispose()方法

#7


对上面的兄弟们说的对呀!
这就是C#的一大好处呀!

#8


一般情况下不用考虑对象的释放问题。但是C#的GC并不是在对象超出使用区域,或不再被使用时立即将对象占用的内存释放。
而且,如果在对象中使用的外部资源,如在构造函数中打开了文件,或建立了数据库连接,这种类必须实现IDispose接口,并且实现Dispose方法是释放占用的资源。这种类在对象在不再被使用的时候需要调用他的Dispose方法,或者如下使用:
using ( MyClass aClass ) //MyClass中使用了资源
{
    ......//使用aClass
}

出了using域后,using参数中列出的所有对象将被调用Dispose方法

#9


更正一下

using ( MyClass aClass = new MyClass() ) //MyClass中使用了资源
{
    ......//使用aClass
}

#10


1. 如果你的类对象引用了需要显示释放的系统资源(比如文件句炳),那么你首先要做的事情是实现类的Finalizer函数,GC在回收你的类对象占用的内存之前会调用这个函数。在C#里,其语法与C++的析够函数相同,~YourClassName()。

2. Finalizer/GC的缺点是调用时间不确定,GC只有在特定的条件下才进行,而在Finalizer调用之前,系统资源仍然会处于被占用的状态。

3. 你可以为类的用户提供可以显示释放资源的方法,IDispose接口,但那只是Finalizer的补充,如果用户没有调用Dispose,Finalizer一样有责任完成清理工作。

4. C#特别提供了using statement支持IDispose接口。

5. 如果没有重要的系统资源或者其他充分的理由,不要实现Finalizer和IDispose,因为Finalizer会影响系统的性能。