using 语句

       某些类型的非托管对象有数量限制或很耗费系统资源,在代码使用完它们后,尽可能快的释放它们是非常重要的,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

    {
        static void Main(string[] args)
        {
            //包含多个资源
            using (TextWriter tw1 = File.CreateText("Lincoln.txt"),
                             tw2 = File.CreateText("Franklin.txt"))
            {
                tw1.WriteLine("Four score and seven years age,...");
                tw2.WriteLine("Early to bed;Early to rise...");
            }


            using (TextReader tr1 = File.OpenText("Lincoln.txt"),
                tr2 = File.OpenText("Franklin.txt"))
            {


                string InputString;
                while (null != (InputString = tr1.ReadLine()))
                {
                    Console.WriteLine(InputString);
                }
                while (null != (InputString = tr2.ReadLine()))
                {
                    Console.WriteLine(InputString);
                }
            }


            //嵌套
            using (TextWriter tw1 = File.CreateText("Lincoln.txt"))
            {
                tw1.WriteLine("Four score and seven years age,...");
                using (TextWriter tw2 = File.CreateText("Franklin.txt"))
                {
                    tw2.WriteLine("Early to bed;Early to rise...");
                }
            }
            Console.ReadKey();
        }
    }

using语句的另一种形式

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语句已经释放了它的非托管资源之后使用该资源,导致了不一致的状态,因此它提供了较少的保护,不推荐使用

猜你喜欢

转载自blog.csdn.net/luochenlong/article/details/80518987