在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在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信息应该是有更新的)。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论