在下面的示例中,如果在using语句中引发异常,则连接是否会关闭并处理?
using (var conn = new SqlConnection("..."))
{
conn.Open();
// stuff happens here and exception is thrown...
}
Run Code Online (Sandbox Code Playgroud)
我知道下面这段代码会确保它确实如此,但我很好奇使用声明是如何做到的.
var conn;
try
{
conn = new SqlConnection("...");
conn.Open();
// stuff happens here and exception is thrown...
}
// catch it or let it bubble up
finally
{
conn.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
这是我的电话采访问题:是否有时间不会在使用块声明范围的对象上调用Dispose?
我的回答是否定的 - 即使在使用块期间发生异常,仍会调用Dispose.
面试官不同意并说如果using包裹在try- catch块中,那么当你进入catch块时就不会调用Dispose.
这与我对构造的理解相反,我无法找到任何支持采访者观点的东西.他是正确的还是我误解了这个问题?
我的理解是,一旦代码退出块,.NET 中的using语句就会调用IDisposable对象的Dispose()方法.
using声明是否还做其他事情?如果没有,似乎以下两个代码示例实现完全相同的事情:
Using Con as New Connection()
Con.Open()
'do whatever '
End Using
Dim Con as New Connection()
Con.Open()
'do whatever '
Con.Dispose()
Run Code Online (Sandbox Code Playgroud)
我会给那些确认我是正确的人或者指出我错了并给出解释原因的人给出最好的答案.请记住,我知道某些类可以在其Dispose()方法中执行不同的操作.这个问题是关于using语句是否达到与调用对象Dispose()方法完全相同的结果.