Dispose()与close()的关系--源码解析
类SqlConnection
父类 DbConnection
没有Dispose()方法
有close()方法 public abstract void Close();
再父类 Component
通过上面的源码分析,得到两个结论
1是 dispose()中调用了close()
2是 使用using{代码块} 会自动调用dispose() 避免了遗忘释放资源,为开发带来稳定
类SqlConnection
Dispose(Boolean):Void 有参的Dispose方法 -- 是父类提供的
protected override void Dispose(bool disposing)
{
if (disposing)
{
this._userConnectionOptions = null;
this._poolGroup = null;
this.Close(); -->调用了自己类的override的close()方法
}
this.DisposeMe(disposing);
base.Dispose(disposing);
}
Close():Void
public override void Close() -- 重写父类提供的方法
C++的一些代码
父类 DbConnection
没有Dispose()方法
有close()方法 public abstract void Close();
再父类 Component
Dispose():Void -- 无参的Dispose()方法
public void Dispose()
{
this.Dispose(true); -->调用的是子类SqlConnection中 override的dispose(Boolean)
GC.SuppressFinalize(this);
}
Dispose(Boolean):Void -- 带参的不是我们寻找的
protected virtual void Dispose(bool disposing)
通过上面的源码分析,得到两个结论
1是 dispose()中调用了close()
2是 使用using{代码块} 会自动调用dispose() 避免了遗忘释放资源,为开发带来稳定