CSh*_*ned 9 .net c# using-statement
如果我有一个围绕try catch语句的using块,那么using语句中的对象会发生什么情况?catch会触发异常吗?请考虑以下代码:
using (IDatabaseConnectivityObject databaseConnectivityObject = new DbProviderFactoryConnectionBasicResponse())
{
try
{
Foo();
}
catch (ArgumentNullException e)
{
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们假设Foo()失败并且触发了异常并且有效地破坏了程序将处理databaseConnectivityObject吗?这很重要的原因是该对象具有与之关联的数据库连接.
Jon*_*nna 10
你可以把它想象using成try-finally的简称.因此,您的代码相当于:
IDatabaseConnectivityObject databaseConnectivityObject = new DbProviderFactoryConnectionBasicResponse();
try
{
try
{
Foo();
}
catch(ArgumentNullException e)
{
throw;
}
}
finally
{
if(databaseConnectivityObject != null)//this test is often optimised away
databaseConnectivityObject.Dispose()
}
Run Code Online (Sandbox Code Playgroud)
看着这种方式,你可以看到Dispose()如果抛出异常确实会调用它,因为try-finally在try-catch之外.
这正是我们使用的原因using.
| 归档时间: |
|
| 查看次数: |
4064 次 |
| 最近记录: |