2

我有一个有DbConnection变量的类。在类构造函数中,我为其分配了一个新DbConnection实例。既然它是一个IDisposable,我应该在我班级的析构函数(或其他地方)对它做些什么吗?
我知道如果使用它是一段代码,我应该将它包装在一个using块中,我不知道为什么,但在这里我将它分配一次并将它用于我的班级的所有调用。

如果有什么不同,我使用的是 C# 4.0。

4

4 回答 4

7

既然它是一个 IDisposable,我应该在我班级的析构函数(或其他地方)用它做点什么吗?

不,通常您不会有终结器/析构函数 -现代 .NET 几乎不需要它们。

但是,您的类应该实现IDisposable并在那里处理数据库连接。这样,您基本上将处置的责任转嫁给了创建您的类的实例的人。

于 2013-04-14T19:40:27.150 回答
0

所有处理非托管资源的类都实现IDisposable. 这样,您可以确保非托管资源在使用using() {}或调用- 方法后被释放Dispose

来自MSDN

IDisposable Interface - Defines a method to release allocated resources.
于 2013-04-14T19:39:28.967 回答
0

这篇文章可能会有所帮助 -实现 Dispose 方法

基本上,实现IDisposable的类依赖于一些资源,这些资源在不再需要时需要被炒掉。在您的情况下,这是与数据库的连接。始终保持连接打开是不明智的。如果您在块内使用它using- 它将在块的末尾处理对象(它是try finally构造的语法糖)。如果您将其作为对象字段/属性 - 最好的想法是让您的班级也实现IDisposable并确保您班级的用户正确处理它。

旁注 - 您可以在终结器中处理您的对象,但对于正常的工作流程,强烈建议不要这样做,所以请不要这样做。

于 2013-04-14T19:41:54.033 回答
0

使用“使用”代码块围绕您的 dbconnection 自动处理任何打开的连接

using(sqlConnection conn=new SqlConnection(connectionstring)){
//rest of the code here
}
于 2013-04-15T12:50:00.463 回答