如果对象位于使用块中,则是否关闭将 SqlConnecions 作为私有字段的对象
本文关键字:对象 SqlConnecions 字段 于使用 是否 如果 | 更新日期: 2023-09-27 18:37:13
我知道在像下面这样的使用块中使用 SqlConnection 会在使用块结束时关闭连接。
using (var connection = factory.NewSqlConnection())
{
//code
}
我想知道具有 SqlConnection 私有字段并在 using 语句中使用的对象是否也会像这样关闭连接:
using (var db = factory.NewDatabaseManager())
{
//code
}
public class DatabaseManager
{
private SqlConnection _connection;
public DatabaseManager(SqlConnection connection)
{
_connection = connection;
}
}
如果我理解正确的话,DatabaseManager
类用于using
语句内部,因此它必须实现IDisposable
,因此具有自己的Dispose
方法。
在这种情况下,仅当 DatabaseManager
类中的 Dispose
方法调用SqlConnection
对象的 Dispose
方法时,才会释放 SqlConnection
对象。 没有任何魔力可以做到这一点。您的代码必须正确管理SqlConnection
,否则您将遇到问题。
它可以,
但你必须编写代码来做到这一点。下面是数据库管理器现在实现 IDisposable 的示例。在 using 语句之前会给你一个编译时错误,因为它没有实现它。
下面的_connection
也叫field
,而不是完全是别的attribute
。
在开始在您的类型中实现 IDisposable 之前,请参阅实现 IDisposable 的正确方法,就像它永远不会引发异常一样。这是对 Dispose 模式Microsoft采用的,它是一个很好的清单,列出了要做什么和要避免什么。
using (DatabaseManager db = factory.NewDatabaseManager())
{
//code
}
public class DatabaseManager : IDisposable
{
private SqlConnection _connection;
public DatabaseManager(SqlConnection connection)
{
_connection = connection;
}
// basic implementation of IDisposable
public void Dispose() {
_connection.Dispose();
}
}