gpt4 book ai didi

c# - 在 c# 中创建一个 IDisposable 类,它在完成时清理一个 SqlConnection

转载 作者:太空狗 更新时间:2023-10-30 00:17:25 26 4
gpt4 key购买 nike

在对 previous question 的回答中有人推荐:

have the SqlConnection a member variable of your class, but make the class IDisposable and dispose of the SqlConnection when the class is disposed

我已经将这个建议的实现放在一起(如下)但想检查这个实现是否正确(显然它目前除了打开连接之外没有做任何事情但我的想法是那里会有一些方法可以使用连接,并且可以依赖它的存在和开放)。

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("...")) { } 更有效/更好吗?

最佳答案

SqlConnection 是一种托管资源,应该在 if (disposing) block 中进行处理。使用你的类的类应该处理它,最好使用 using block 。这是否比针对 SqlConnections 的单个 using block 更好将取决于此类的其他方法以及它们的使用方式。

关于c# - 在 c# 中创建一个 IDisposable 类,它在完成时清理一个 SqlConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2020576/

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