在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. 夺命雷公狗-----React---21--小案例之心情留言板
  2. Oracle(控制用户权限)
  3. zTree的使用2
  4. Android提升篇系列:Activity recreate(Activity 重新创建/自我恢复)机制(一)
  5. Linux安装卸载JDK(1.7 rpm)
  6. C# Socket编程笔记(转)
  7. make问题:make[1] entering directory
  8. NoClassDefFoundError: javassist/util/proxy/MethodFilter
  9. JPA2.1 中三个提升应用性能的新功能
  10. 那些年,我们一起学WCF--(7)PerSession实例行为
  11. hdoj分类
  12. 【转】求质数算法的N种境界
  13. NTP时间服务器
  14. data-packed volume container - 每天5分钟玩转 Docker 容器技术(43)
  15. Dynamics 365 Online-多选域
  16. Bootstrap3 栅格系统-简介
  17. ueditor 回显html样式会直接出来,无效
  18. Windows Server 2012 NTP时间同步
  19. 对nginx中location的认识
  20. codeforces959C

热门文章

  1. 《Metasploit魔鬼训练营》第七章学习笔记
  2. 去培训机构参加IT培训值不值
  3. Redis 高可用集群
  4. 【二十二】mysqli事务处理
  5. openstack windows 2008镜像 制作
  6. liunx分布式监控工具
  7. PHP能引起安全的函数
  8. Shell 初步学习
  9. Netty4.0.24.Final 版本中 IdleStateHandler 使用时的局限性
  10. Shell中处理方法返回值问题