簡體   English   中英

C#中的IDisposable接口

[英]IDisposable interface in C#

我正在學習C#,我讀到了一個名為IDisposable的接口,其中唯一的方法是Dispose()使用using syntac調用它。 如果我使用以下內容:

Class b=new Class();
using(b)
{
//statements
}

using (Class o=new Class())
{
//statements
}

如果在兩種情況下大括號結束后我嘗試使用對象b和o會發生什么?

b仍然在范圍內而不是null,但是如果你在調用Dispose之后嘗試使用它們(因此阻止你進一步使用它),那么Dispose掉的大多數實現良好的類應該拋出異常。

它將編譯並可能仍然可用 - 它完全取決於它是如何在內部實現的。 但是,您不應該使用它,因為它的狀態不能得到保證並且會產生令人困惑的代碼。

o將超出范圍,不會編譯。

所有using語句都會導致編譯器發出一些try-catch語句並在包裝對象上調用Dispose 它沒有別的。

如果以后需要該對象,則不必使用using塊。 建議使用它,但在某些情況下,您可以使用以下結構:

class b = null;
try
{
  b = new class();

  /* ... do your stuff ... */

}
catch (Exception)
{
  /* handle errors */  
  throw;
}
finally
{
  if (b != null)
  {
    b.Dispose();
    b = null;
  }            
}

這樣,如果存在,b將被放置在方法的末尾。

您還可以在using塊中使用using塊:

using (Class a=new Class())
{
  /* you can access a here */
  using (Class b=new Class())
  {
    /* you can access a and b here  */
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM