c# - 在 C# 中使用托管 C++ 包装器时正确使用 IDisposable 模式

标签 c# c++-cli unmanaged idisposable

我的 C# 类创建并使用托管 C++ 对象,该对象包装(分配和使用)非托管 C++ 对象和资源。托管 C++ 类使用析构函数和终结器正确实现 IDisposable。因此,看来我的 C# 类也应该实现 IDisposable。我也想在 C# 中遵循正确的 IDisposable 模式。

我不清楚以下内容:

  • 在 C# 类的 Dispose 方法中,我应该将托管 C++ 对象视为托管还是非托管(因为它们在内部依赖于非托管资源)?

最佳答案

是的,您的 C# 类也应该实现 IDisposable。它的 Dispose() 方法应该简单地处理 C++/CLI 对象。不需要终结器,您已经在包装器中实现了终结器。您的包装器与包装操作系统资源的许多其他 .NET 类没有什么不同。

例如:

class Test : IDisposable {
    private CppWrapper obj;
    //...
    public void Dispose() {
       if (obj != null) { 
           obj.Dispose();
           obj = null;
       }
    }
}

关于c# - 在 C# 中使用托管 C++ 包装器时正确使用 IDisposable 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7155324/

相关文章:

c++ - C++/CLI 中 long^ 到 LONG* 的转换

c# - 如何在C#进程和非托管C进程之间共享快速内存?

c++ - 需要帮助理解 c++ .h 文件

c# - 在 MongoDb 中更新插入字典

c# - XNA 不跳平台

c# - 如何在 C++/CLI 中包装 C++ 接口(interface)(抽象类)?

.net - 你如何 'cancel' 一个 UdpClient::BeginReceive?

c# - 在非托管 DLL 中调用方法时,如何保护我的 C# 应用程序不崩溃?

c# - 泛型类中的数组和索引器

c# - 从 IList<object_type> 获取 IList<field_type>