using 語句(C# 參考)(轉載)

using 語句api

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

 

 

示例code


 

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

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

 

 

備註blog


 

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

 

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

 

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

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

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

 

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

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

能夠實例化資源對象,而後將變量傳遞到 using 語句,但這不是最佳作法。 在這種狀況下,程序退出 using 塊之後,對象保留在做用域中,可是可能沒有訪問其未託管資源的權限。 換而言之,它再也不是徹底初始化的。 若是嘗試在 using 塊外部使用該對象,則可能致使引起異常。 所以,一般最好在 using 語句中實例化該對象並將其範圍限制在 using 塊中。

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();

有關釋放 IDisposable 對象的詳細信息,請參閱使用實現 IDisposable 的對象

 

 

C# 語言規範


 

有關詳細信息,請參閱 C# 語言規範中的 using 語句。 該語言規範是 C# 語法和用法的權威資料。

 

 

原文連接

相關文章
相關標籤/搜索