在C#对象上调用C/C++LI删除

我正在将一些代码从C/C++LI转换为C#.其中一个对象在C/C++LI版本中具有析构函数.一些其他C/C++LI代码在使用后调用删除”对象.

我需要在C#版本的对象中实现哪种方法,这样“删除”继续运行(Idisposable.dispose,finalizer或者其他我所缺少的东西)?

解决方法

如果您需要确定性的资源处理,我会说 IDisposable界面是您寻找的内容.这通常是非托管资源的情况,例如需要关闭的非托管句柄,流或数据库连接.

在C/C++LI中,如果声明受管类型(ref类等),则使用析构函数语法实现Idisposable,并使用delete关键字调用dispose().如果您在本地声明托管类型的对象(不使用^ operator或gcnew),则当对象超出范围时,C/C++LI甚至会自动为您调用dispose().这样,C/C++LI比C#更方便.

在使用C#时,您将无法在对象上调用delete,而需要手动调用dispose().处理Idisposable对象的另一种方法using块.

终结器(通过使用析构函数语法在C#中实现)与C析构函数不同,因为它将被调用时不是确定性的.具有终结器的对象基本上排队等待,直到终结者线程决定调用他们的终结器,所以有效地你永远不会知道什么时候被调用.

处理非托管资源的最佳方法可能是两者的组合.看到这里推荐的方法
http://msdn.microsoft.com/en-us/library/b1yfkh5e(v=vs.100).aspx

但是请注意,使用Idisposable时,即使可以确定性地处理非托管资源,管理对象仍然需要由垃圾收集器收集(非确定性).

我刚刚发现一篇文章解释了C/C++LI和C#之间的区别.你可能会觉得有趣:
http://weblogs.thinktecture.com/cnagel/2006/04/ccli-finalize-and-dispose.html

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...