c# using 關鍵字小結(轉)

一、導入其餘命名空間或命名空間中定義的類型,這樣就能夠沒必要對類型使用徹底限定名了程序員

       注意:(1) using引入命名空間,並不等於編譯器編譯時加載該命名空間所在的程序集,程序集的加載決定於程序中對該程序集是否存在調用操做,若是代碼中不存在任何調用操做則編譯器將不會加載using引入命名空間所在程序集。所以,在源文件開頭,引入多個命名空間,並不是加載多個程序集,不會形成「過分引用」的弊端。
        (2)使用using System指令後,一個有趣的結果是,可使用不一樣的大小寫形式來表示字符串數據類型:String 或者string。前一個版本依賴於using System指令,後一個版本使用string關鍵字。二者在C#中都合法地引用了System.String數據類型,最終生成的CIL代碼毫無區別。spa

        (3)using指令不只能夠在文件的頂部聲明,還能夠在命名空間聲明的頂部進行聲明。對象

例如:namespace Awl.Michaelis.EssentialCSharp接口

             {             using  System;資源

                       .............字符串

          }編譯器

        二者的區別在於:後者的using指令只在你聲明的那個命名空間內有效。例如在命名空間Awl.Michaelis.EssentialCSharp的外部又聲明瞭一個新的命名空間,那麼新的命名空間不會受到using System指令的影響。string

二、爲命名空間或類型建立別名。編譯

    例如:using MyCompany = PC.Company;       //命名空間的別名。
               using Project = PC.Company.Project; //類型的別名變量

    注意:爲命名空間或類型建立別名一般有如下兩個緣由:

        (1) 縮寫一個長名稱。

        (2)消除同名的兩個類型的歧義。

         例如:在於同一文件中引入的不一樣命名空間中包括了相同名稱的類型,如SharpMap.Geometries.Point與System.Drawing.Point。爲了不出現名稱衝突,能夠經過設定別名來解決:
                using SGPoint = SharpMap.Geometries.Point;
                using SDPoint = System.Drawing.Point;
        儘管咱們能夠經過類型全名稱來加以區分,可是這顯然不是最佳的解決方案。用using指令建立別名,有效的解決了這種可能的命名衝突,纔是最佳的解決方案。

2、using做爲語句,用於定義一個範圍,在此範圍的末尾將釋放對象。

   一、使用方法

     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語句,例如:    Font f2 = new Font("Arial", 10, FontStyle.Bold);  try  {      //執行文本繪製操做  }  finally  {      if (f2 != null) ((IDisposable)f2).Dispose();  }

相關文章
相關標籤/搜索