【发布时间】:2010-01-07 13:28:24
【问题描述】:
在对某人推荐的previous question 的回答中:
将 SqlConnection 作为类的成员变量,但使类 IDisposable 并在释放类时释放 SqlConnection
我已经整理了这个建议的实现(如下),但想检查这个实现是否正确(显然它目前除了打开连接之外没有做任何事情,但我的想法是那里会有一些方法可以使用连接,并且能够依赖它存在并打开)。
public class DatabaseRecord : IDisposable
{
protected SqlConnection connection;
public DatabaseRecord()
{
connection = new SqlConnection("ConnectionString");
connection.Open();
}
// IDisposable implementation
private bool disposed;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
connection.Dispose();
}
disposed = true;
}
}
// Destructor
~DatabaseRecord()
{
Dispose(false);
}
}
这行得通吗?使用 DatabaseRecord 实例的类是否需要做任何特殊的事情,或者一旦不再使用/引用实例,会自动调用 Dispose 吗?这是否比在需要连接的每个单独的方法主体中使用 using (var connection = new SqlConnection("...")) { } 更有效/更好?
【问题讨论】:
标签: c# .net idisposable sqlconnection