[英]Why do I need I need to implement IDisposable() on a child class
我写了一个继承 DbConnection 的类,但我不完全理解它为什么会这样工作。
起初我有这个:
public class DatabaseConnection : DbConnection
{
...
public override void Close()
{
// Some stuff
}
// No Dispose method
}
using(var db = new DatabaseConnection())
{
// Some processing
}
Close() 方法没有被调用,我们可以看到连接保留在 MySQL 服务器上。
现在我有了这个,它可以工作(它确实关闭了连接,并且服务器正常):
public class DatabaseConnection : DbConnection, IDisposable
{
...
public override void Close()
{
// Some stuff
}
public new void Dispose()
{
Close();
base.Dispose();
GC.SuppressFinalize(this);
}
}
using(var db = new DatabaseConnection())
{
// Some processing
}
为什么继承 DbConnection 类并覆盖 Close() 方法不起作用?
using 语句在块的末尾调用 Dispose 方法。
由于DbConnection还实现了 IDisposable 接口,因此第一个代码段中的 using 块调用继承的 Dispose 方法。
连接保持活动状态可能是因为您覆盖了 Close 函数,但我不确定这一点,如果我错了,请纠正我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.