本文共 1701 字,大约阅读时间需要 5 分钟。
一、using指令
using
指令有三种用途:
允许在命名空间中使用类型,这样无需在该命名空间中限定某个类型的使用:
using System.Text;
允许访问类型的静态成员,而无需限定使用类型名称进行访问:
using static System.Math;
为命名空间或类型创建别名。 这称为 using 别名指令。
using Project = PC.MyCompany.Project;
二、using语句
提供能确保正确使用 对象的方便语法。
下面的示例演示如何使用 using 语句。
using (Font font1 = new Font("Arial", 10.0f)) { byte charset = font1.GdiCharSet; }
和 是访问非托管资源(本例中为文件句柄和设备上下文)的托管类型的示例。 有许多其他类别的非托管资源和封装这些资源的类库类型。 所有这些类型都必须实现 接口。
按照规则,当使用 IDisposable
对象时,应在 using
语句中声明和实例化此对象。
using
语句按照正确的方式调用对象上的 方法,并(在您按照前面所示方式使用它时)会导致在调用 时对象自身处于范围之外。
在 using
块中,对象是只读的并且无法进行修改或重新分配。
using
语句确保调用 ,即使在调用对象上的方法时发生异常也是如此。 通过将对象放入 try 块中,并在调用 finally 块中的,可以获得相同的结果;
实际上,这就是编译器转换 using
语句的方式。 前面的代码示例在编译时将扩展到以下代码(请注意,使用额外的大括号为对象创建有限范围):
{ Font font1 = new Font("Arial", 10.0f); try { byte charset = font1.GdiCharSet; } finally { if (font1 != null) ((IDisposable)font1).Dispose(); } }
如下面的示例所示,可以在 using
语句中声明一个类型的多个实例。
using (Font font3 = new Font("Arial", 10.0f), font4 = new Font("Arial", 10.0f)) { // Use font3 and font4. }
可以实例化资源对象,然后将变量传递给 using
语句,但这不是最佳做法。 在这种情况下,该对象将在控制权离开 using
块之后保持在范围内,即使它可能将不再具有对其非托管资源的访问权也是如此。 换句话说,再也不能完全初始化该对象。 如果尝试在 using
块外部使用该对象,则可能导致引发异常。 由于这个原因,通常最好是在 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();
更多:
转载地址:http://ljogi.baihongyu.com/