我正在将一些代码从C++/CLI转换为C#.其中一个对象在C++/CLI版本中有一个析构函数.其他一些C++/CLI代码在使用后调用此对象上的"delete".
我需要在此对象的C#版本中实现哪种方法,以便那些"删除"继续运行相同的功能(IDisposable.Dispose,终结器或其他我缺少的东西)?
Bot*_*000 16
我想IDisposable如果你需要确定性的资源处理,那么界面就是你所寻求的.这通常是非托管资源的情况,例如需要关闭的非托管句柄,流或数据库连接.
在C++/CLI中,如果声明托管类型(ref class等),IDisposable则使用析构函数语法实现,并Dispose()使用delete关键字调用.如果在本地声明此类托管类型的对象(不使用^运算符或gcnew),则Dispose()当对象超出范围时,C++/CLI甚至会自动调用您.这样,C++/CLI比C#更方便.
delete使用C#时,您将无法调用该对象,而是需要Dispose()手动调用它.处理IDisposable对象的另一种方法是using块.
终结器(使用析构函数语法在C#中实现)与C++析构函数不同,因为它在调用时不确定.具有终结器的对象基本上排队,直到终结器线程决定调用它们的终结器,因此实际上你永远不知道何时调用它.
处理非托管资源的最佳方法可能是两者的结合.请参阅此处了解推荐的方法:http:
//msdn.microsoft.com/en-us/library/b1yfkh5e(v = vs.100).aspx
但是请注意,在使用时IDisposable,即使您可以确定地处理非托管资源,仍然需要由垃圾收集器(非确定性地)收集托管对象.
我刚刚发现一篇文章解释了C++/CLI和C#之间的差异.您可能会觉得有趣:http:
//weblogs.thinktecture.com/cnagel/2006/04/ccli-finalize-and-dispose.html
| 归档时间: |
|
| 查看次数: |
7395 次 |
| 最近记录: |