[C#][Tips]再探using陈述式
[C#][Tips]再探using陈述式 上一篇我大概介绍了什么是using statement,简单可以说using statement就是try finally的简洁语法, 但我有些朋友却认为using statement会吃掉所有例外状况(try catch finally语法), 而之前在MSDN论坛上也有看到某些网友也支持这样的说法, 所以这篇我就来验证using statement到底是否有含catch。
我利用MSDN范列编译成功后,比对IL中介码来看看using statement是否真的包含catch。 Font font2 = new Font("Arial",10.0f); using( font2 ) { bool isbold = font2.Bold; }
IL Font font2 = new Font( "Arial",10.0f ); try { bool isbold = font2.Bold; } finally { if( font2 != null ) font2.Dispose(); } ?
IL? 可以看到两种写法的IL中介码几乎一模一样,而且不包含catch。
来看看try catch finally后的IL中介码 Font font2 = new Font( "Arial",10.0f ); try { bool isbold = font2.Bold; } catch( Exception ex ) { } finally { if( font2 != null ) font2.Dispose(); } ?
IL 透过IL中介码我们可以知道using statement真的不包含catch,所以千万不要在误会使用using stement会吃掉所有例外状况。
上一篇我也提到如果要捕抓例外状况须自行加入try catch,我们也来看看C#编译器会输出什么样的程序。 Font font2 = new Font( "Arial",10.0f ); using( font2 ) { try { bool isbold = font2.Bold; } catch( Exception ex ) { } } ?
可以看到使用using statement+try catch后,就如同使用try catch finally。
再补充using statement注意事项: 1.由于会隐含执行Dispose,所以不需要再手动处理,如果自己在手动执行Close()、Dispose(), ? 只会让CLR再度浪费资源进而影响程序性能。
参考 SQL Server Connection Pooling (ADO.NET) 原文:大专栏 ?[C#][Tips]再探using陈述式 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |