using關鍵字在C#中的3種用法


using 關鍵字有兩個主要用途:
  (一).作為指令,用於為命名空間創建別名或導入其他命名空間中定義的類型。
  (二).作為語句,用於定義一個范圍,在此范圍的末尾將釋放對象。


(一).作為指令

1、用在命名空間里    

using + 命名空間名字,這樣可以在程序中直接用命令空間中的類型,而不必指定類型的詳細命名空間,類似於Java的import,這個功能也是最常用的,幾乎每個cs的程序都會用到。
例如:using System; 一般都會出現在*.cs中。

2、為命名空間或類型創建別名,using + 別名 = 包括詳細命名空間信息的具體的類型。

這種做法有個好處就是當同一個cs引用了兩個不同的命名空間,但兩個命名空間都包括了一個相同名字的類型的時候。當需要用到這個類型的時候,就每個地方都要用詳細命名空間的辦法來區分這些相同名字的類型。而用別名的方法會更簡潔,用到哪個類就給哪個類做別名聲明就可以了。注意:並不是說兩個名字重復,給其中一個用了別名,另外一個就不需要用別名了,如果兩個都要使用,則兩個都需要用using來定義別名的。

using System;

using aClass = NameSpace1.MyClass;

using bClass = NameSpace2.MyClass;

 

namespace NameSpace1 

{

    public class MyClass 

    {

        public override string ToString() 

        {

            return "You are in NameSpace1.MyClass";

        }

    }

}

 

namespace NameSpace2 

{

    class MyClass 

    {

        public override string ToString() 

        {

            return "You are in NameSpace2.MyClass";

        }

    }

}

 

namespace testUsing

{

    using NameSpace1;

    using NameSpace2;

    class Class1

    {

        [STAThread]

        static void Main(string[] args)

        {

            aClass my1 = new aClass();

            Console.WriteLine(my1);

            bClass my2 = new bClass();

            Console.WriteLine(my2);

            Console.WriteLine("Press any key");

            Console.Read();

        }

    }

}

(二).作為語句

using 語句允許程序員指定使用資源的對象應當何時釋放資源。using 語句中使用的對象必須實現 IDisposable 接口。此接口提供了 Dispose 方法,該方法將釋放此對象的資源。

    ①可以在 using 語句之前聲明對象。
      Font font2 = new Font("Arial", 10.0f);
      using (font2)
      {
          // use font2
      }
    ②可以在 using 語句之中聲明對象。
      using (Font font2 = new Font("Arial", 10.0f))

      {
          // use font2
      }
    ③可以有多個對象與 using 語句一起使用,但是必須在 using 語句內部聲明這些對象。
        using (Font font3=new Font("Arial",10.0f), font4=new Font("Arial",10.0f))
      {
          // Use font3 and font4.
      }

使用規則
①using只能用於實現了IDisposable接口的類型,禁止為不支持IDisposable接口的類型使用using語句,否則會出現編譯錯誤;
②using語句適用於清理單個非托管資源的情況,而多個非托管對象的清理最好以try-finnaly來實現,因為嵌套的using語句可能存在隱藏的Bug。內層using塊引發異常時,將不能釋放外層using塊的對象資源;
③using語句支持初始化多個變量,但前提是這些變量的類型必須相同,例如:
        using(Pen p1 = new Pen(Brushes.Black), p2 = new Pen(Brushes.Blue))
      {
          //
      }
④針對初始化多個不同類型的變量時,可以都聲明為IDisposable類型,例如:
        using (IDisposable font = new Font("Verdana", 12), pen = new Pen(Brushes.Black))
      {
          float size = (font as Font).Size;
          Brush brush = (pen as Pen).Brush;
      }

using實質
   
在程序編譯階段,編譯器會自動將using語句生成為try-finally語句,並在finally塊中調用對象的Dispose方法,來清理資源。所以,using語句等效於try-finally語句,例如:

using (Font f2 = new Font("Arial", 10, FontStyle.Bold))
{
     font2.F();
}

被編譯器翻譯為:
     Font f2 = new Font("Arial", 10, FontStyle.Bold);
  try
  {
      font2.F();

  }
  finally
  {
      if (f2 != null) ((IDisposable)f2).Dispose();
  }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM