在回答上一个问题时,有人建议:
让 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("...")) { }
在需要连接的每个单独的方法体中使用更有效/更好?