某些类型的非托管对象有数量限制或很耗费系统资源,在代码使用完它们后,尽可能快的释放它们是非常重要的,using语句有助于简化该过程并确保这些资源被适当的处置(dispose)。
资源是值实现了System.IDisposable接口的类或结构。简而言之,接口就是未实现的函数成员的集合,类和结构可以选择去实现。IDispisable接口含有单独一个名词为Dispose的方法。
使用支援的阶段如下:
●分配资源
●使用资源
●处置资源
using语句帮助减少意外的运行时错误带来的潜在问题。他整洁地包装了资源的使用。有两种形式的using语句,第一种形式如下:
● 圆括号内的代码分配资源;
● Statement是使用资源的代码;
● using语句隐式产生处置该资源的代码。
意外的运行时错误称为异常。处理可能的异常的标准方法是把可能导致异常的代码放进一个try块中,并把任何无论有没有异常都必须执行的代码放进一个finally中。
这种形式的using语句确实这么做。它执行下列内容:
● 分配资源;
● 把Statement放进try块;
● 创建资源Dispose方法的调用,并把它放进finally块。
示例:
class Program
{
static void Main(string[] args)
{
using (TextWriter tw = File.CreateText("Lincoln.txt"))
{
tw.WriteLine("Four score and seven years age,...");
}
//using语句
using (TextReader tr = File.OpenText("Lincoln.txt"))
{
string InputString;
while (null != (InputString = tr.ReadLine()))
{
Console.WriteLine(InputString);
}
}
Console.ReadKey();
}
}
using语句还可以用于相同类型的多个资源,资源什么用逗号隔开。
class Program
{using语句的另一种形式如下:
在这种形式中,资源在using声明之前声明。
class Program
{
static void Main(string[] args)
{
TextWriter tr = File.CreateText("ttt.txt");
using (tr)
{
tr.WriteLine("Four score and seven years age,...");
}
}
}
虽然这种形式也能确保对资源的使用结束后总是调用Dispose方法。但它不能防止在using语句已经释放了它的非托管资源之后使用该资源,导致了不一致的状态,因此它提供了较少的保护,不推荐使用