c#中的using用法

using语句:

1、 命名空间指示符,用于引用命名空间

如:using Sysytem;

2、 别名指示符(指定命名空间或类的别名)

如:using Dos=System.Console;

3、 资源管理的语句功能

如:

using(Font F= new Font(“宋体”,12))

{
     Console.WriteLine(F.Italic.ToString());             
}//运行结束时,释放了F对象

在第三种用法里.C# 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 块中。

发表评论

电子邮件地址不会被公开。 必填项已用*标注