C#基础:在using中创建对象
2017-01-18 11:56
260 查看
在using中创建的对象的类必须是实现了IDispose接口的类,示例代码如下:
网上很多人说:
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信息应该是有更新的)。
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信息应该是有更新的)。
相关文章推荐
- C#基础(类,属性,方法,对象的创建,结构体)
- C#基础知识回顾:1.由WeakReference想到对象的创建与销毁
- 企业信息化系统基础——AD:使用C#批量创建帐号
- C# 3.0新特征之创建和初始化集合对象
- C# 3.0新特征之创建和初始化集合对象
- 部分组件无法创建,Scripting.FileSystemObject(FSO)对象的建立基础!
- 如何合理创建c#对象
- 用C#创建COM对象
- JavaScript基础—对象(的创建方式)
- C# 利用反射动态创建对象[摘录]
- 打破Java定律:无需创建对象--Ioc容器革命-Java基础-Java-编程开发
- C# 2005如何根据类型声明的字符串反射创建泛型(Generic)对象
- 企业信息化系统基础——AD:使用C#批量创建帐号
- 翻译:C#创建多颜色下拉列表框(Multi-color DropDownList using C#)
- 在C# 2.0上写另外一种语言来创建对象
- 不用close了 创建的对象在using 语句结束后被摧毁了
- 数据结构基础 - 链表的创建(C和C#代码)
- 企业信息化系统基础——AD:使用C#批量创建帐号
- 企业信息化系统基础——AD:使用C#批量创建帐号
- C#下如何通过不添加对Office的引用,而创建Excel对象