gpt4 book ai didi

c# - 在 C# 中处理非托管对象

转载 作者:太空宇宙 更新时间:2023-11-03 22:17:48 25 4
gpt4 key购买 nike

假设我有一个以 MyCustomDatabaseAccess 作为数据成员的类。 MyCustomDatabaseAccess 有一个 Dispose() 方法。 MyCustomDatabaseAccess 是访问数据库的中间件类。

public class MyClass {
private MyCustomDatabaseAccess db_access;
}

MyClass是否需要实现IDisposable接口(interface)?

我现在的解决方案是做这样的事情:

    public class MyClass {
private MyCustomDatabaseAccess db_access;

public void GetDBResults () {
db_access = new MyCustomDatabaseAccess();
DataTable dt = db_access.ExecuteStoredProc(param1, param2, etc..);

//do stuff with results

db_access.Dispose();

}

}

根据我在 MSDN 上阅读的内容,另一种确保正确处理此对象的方法是让 MyClass 实现 IDisposable 接口(interface),然后实现 Dispose() 函数,然后在调用对象的类中调用它我的课。看到这个了解更多信息 http://www.devx.com/dotnet/Article/33167/0/page/3

哪种方式更可取,为什么?谢谢!

最佳答案

我建议使用以下两种方法之一:

  1. 将 IDisposable 对象包装在 using block 中。
  2. 在您的类中保留对 IDisposable 对象的引用,并让您的类实现 IDisposable。在类的 Dispose 方法中处置对象。

您应该选择哪个取决于对象所需的生命周期。

  • 如果您只在单个方法调用 期间需要它,那么第一个选项 - using block - 更可取,因为它更简单且更不容易出错。 using block (几乎)保证一旦不再需要该对象就会为您调用 Dispose - 即使在抛出异常的情况下也是如此。
  • 如果一次性对象的持续时间必须长于单个方法调用的持续时间,那么您不能使用第一个选项,因此您应该使用第二个 - 即您的类应该实现 IDisposable。

关于c# - 在 C# 中处理非托管对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4411917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com