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