C# using语句用于定义一个范围,在此范围的末尾将释放对象,这样的用法比较少见,常见于非托管资源。这些资源在使用后,就必须彻底释放。
公司主营业务:网站设计、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出响水免费做网站回馈大家。
学习过C#的人都知道,using是关键字。在MSDN里面一查C#参考(C# Reference),using关键字就会有两个主要用途:
1、作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。请参见[using 指令]。
2、作为C# using语句,用于定义一个范围,在此范围的末尾将释放对象。请参见[using 语句]。
其中,第1点就是我们所熟悉using的使用方法,而第二种C# using语句方法我们就比较少用了,它常见于非托管资源(也就是在C++编程里面可能碰到的句柄和设备上下文),这些资源使用完毕后,是必须释放的。在C#里面,由于完全的面向对象编程,这些资源类型都实现了IDisposable接口,因此会使用在捕获异常try...catch语句的finally块中释放资源,代码如下:
- {
- Font font1 = new Font("Arial", 10.0f);
- try
- {
- byte charset = font1.GdiCharSet;
- }
- finally
- {
- if (font1 != null)
- ((IDisposable)font1).Dispose();
- }
- }
这样确保调用Dispose,从而保证释放资源。(请注意,使用额外的大括号为对象创建有效的范围而此时如果使用using语句,同样能够获得相同的结果,代码如下:
- using (Font font3 = new Font("Arial", 10.0f), font4 = new Font("Arial", 10.0f))
- {
- // Use font3 and font4.
- }
using语句按照正确的方式调用对象上的Dispose方法,并(在您按照前面所示方式使用它时)会导致在调用 Dispose 时对象自身处于范围之外。在using块中,对象是只读的并且无法进行修改或重新分配。
同时还要注意的一点是:
按照规则,当使用IDisposable对象时,应在using语句中声明和实例化此对象。虽然可以在using语句外实例化资源对象,代码如下:
- Font font2 = new Font("Arial", 10.0f);
- using (font2) // not recommended
- {
- // use font2
- }
- // font2 is still in scope
- // but the method call throws an exception
- float f = font2.GetHeight();
在这种情况下,该对象将在控制权离开 using 块之后保持在范围内,即使它可能将不再具有对其非托管资源的访问权也是如此。换句话说,再也不能完全初始化该对象。如果试图在 using 块外部使用该对象,则可能导致引发异常,如上述代码段3中的font2.GetHeight()调用而产生异常。由于这个原因,通常最好是在 using 语句中实例化该对象并将其范围限制在 using 块中。
在这一点上,如果再使用ildasm工具一查,就会看到代码段1和代码段2生成的代码几乎是完全一样的,而这样使用使用using语句的方式更加简洁、方便。
本文来自liput的博客园文章《C# using指令 心得总结》
【编辑推荐】
本文题目:C# using语句使用心得总结
网页链接:http://www.shufengxianlan.com/qtweb/news27/503577.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联