[英]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.