在using中创建的对象的类必须是实现了IDispose接口的类,示例代码如下:

static void Main(string[] args)
{
Method();
Console.WriteLine("OkMain");
Console.ReadKey();
} public static void Method()
{
using(var cnt = new SqlConnection("server=192.168.0.111;database=TestDb;uid=sa;pwd=pass"))
{
cnt.Open();
}
Console.WriteLine("OkMethod");
}

网上很多人说:

using(var cnt = new SqlConnection("server=192.168.0.111;database=TestDb;uid=sa;pwd=pass"))

{

cnt.Open();

}

Console.WriteLine("MethodOk");

就相当于

var cnt = new SqlConnection("server=192.168.0.111;database=TestDb;uid=sa;pwd=pass");

try{

cnt.Open();

}finally

{

cnt.Close();

}

Console.WriteLine("MethodOk");

对于上面的代码我的理解是:

很明显,如果var cnt = new SqlConnection("server=192.168.0.111;database=TestDb;uid=sa;pwd=pass");出现异常,肯定会抛给此函数的上级函数,故后面的代码均不执行

然后,由于上面的try-finally没有catch部分,故它只有异常监测能力,而没有手动的异常捕获能力。

故如果cnt.Open();出现异常,则首先进入finally中执行cnt.Close();然后将此异常抛给此函数的上级,故Console.WriteLine("MethodOk");也不会执行

如果此函数的上级函数没有手动捕获这个函数,则该上级函数的调用此函数代码的后面代码也不会执行,且继续将异常往上上级函数抛(但异常Trace信息应该是有更新的)。

最新文章

  1. java-通过JDBC操作数据库
  2. FluentData(微型ORM)
  3. iredmail安装脚本分析(二)---get_all.sh 文件所在目录为PKGS
  4. pageX/Y, offset(), position(), scrollTop(), screenX/Y, clientX/Y, pageX/Y
  5. 第五百八十六天至第六百零五天 how ccan I 坚持
  6. Sprint回顾
  7. APP性能分析1
  8. 不学就吃亏的underscorejs类库学习示例 ——(集合篇)
  9. Python Tutorial 学习(九)--Classes
  10. My SQL和LINQ 实现ROW_NUMBER() OVER以及Fatal error encountered during command execution
  11. oracle至mysql该指南的数据模式()任意数据源之间的跨导应用
  12. 在Sublime Text3中运行PHP代码
  13. springmvc+mybatis 做分页sql 语句
  14. Error: Can't find Python executable, you can set the PYTHON env variable.
  15. Machine Learning - week 1
  16. 蓝桥杯练习系统—基础练习 sine之舞
  17. HTML网页背景图很长要有滚动条滑动
  18. Shell 脚本格式注意事项
  19. Session & Cookie小知识~
  20. 深度学习中 Batch Normalization

热门文章

  1. Python第一天自学,变量,基本数据类型
  2. 加密代理和Retrofit解密Converter
  3. JavaEE中的MVC(三)定制Struts——命令模式
  4. php 7.2 一些注意事项.
  5. Filter、Listener 学习总结
  6. Spring Boot应用 打包与部署指南
  7. codeforces 893B Beautiful Divisors 打表
  8. CCF-201403-1-相反数
  9. Linux 配置Jenkins
  10. Qwt安装(转)