C#中using語句

using 語句

  • 提供可確保正確使用 IDisposable 對象的方便語法。
    • 示例

      下面的示例演示如何使用 using 語句。

      C#複製

      using (var font1 = new Font("Arial", 10.0f)) 
      {
          byte charset = font1.GdiCharSet;
      }
      

      備註

      File 和 Font 是訪問非託管資源(本例中爲文件句柄和設備上下文)的託管類型的示例。 有許多其他類別的非託管資源和封裝這些資源的類庫類型。 所有此類類型都必須實現 IDisposable 接口。

      IDisposable 對象的生存期限於單個方法時,應在 using 語句中聲明並實例化它。 using 語句按照正確的方式調用對象上的 Dispose方法,並(在按照前面所示方式使用它時)會導致在調用 Dispose 時對象自身處於範圍之外。 在 using 塊中,對象是隻讀的並且無法進行修改或重新分配。

      using 語句可確保調用 Dispose,即使 using 塊中發生異常也是如此。 通過將對象放入 try 塊中,然後調用 finally 塊中的 Dispose,可以實現相同的結果;實際上,這就是編譯器轉換 using 語句的方式。 前面的代碼示例在編譯時將擴展到以下代碼(請注意,使用額外的大括號爲對象創建有限範圍):

      C#複製

      {
        var font1 = new Font("Arial", 10.0f);
        try
        {
          byte charset = font1.GdiCharSet;
        }
        finally
        {
          if (font1 != null)
            ((IDisposable)font1).Dispose();
        }
      }
      

      有關 try-finally 語句的詳細信息,請參閱 try-finally 主題。

      可在 using 語句中聲明一個類型的多個實例,如下面的示例中所示:

      C#複製

      using (Font font3 = new Font("Arial", 10.0f),
                  font4 = new Font("Arial", 10.0f))
      {
          // Use font3 and font4.
      }
      

      可以實例化資源對象,然後將變量傳遞到 using 語句,但這不是最佳做法。 在這種情況下,控件退出 using 塊以後,對象保留在作用域中,但是可能沒有訪問其未託管資源的權限。 換而言之,它不再是完全初始化的。 如果嘗試在 using 塊外部使用該對象,則可能導致引發異常。 因此,通常最好在 using 語句中實例化該對象並將其範圍限制在 using 塊中。

      C#複製

      var 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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章