在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对象的另一种方法是 终结器(通过使用析构函数语法在C#中实现)与C析构函数不同,因为它将被调用时不是确定性的.具有终结器的对象基本上排队等待,直到终结者线程决定调用他们的终结器,所以有效地你永远不会知道什么时候被调用. 处理非托管资源的最佳方法可能是两者的组合.看到这里推荐的方法: 但是请注意,使用IDisposable时,即使可以确定性地处理非托管资源,管理对象仍然需要由垃圾收集器收集(非确定性). 我刚刚发现一篇文章解释了C/C++LI和C#之间的区别.你可能会觉得有趣: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |