簡體   English   中英

可在C#中使用ID

[英]IDisposable in C#

我編寫以下代碼:

class myclass : IDisposable
{
    public int a;

    public void Dispose()
    {
        GC.SuppressFinalize(this);
    }
}
class Program
{
    static void Main(string[] args)
    {
        myclass cl = null;
        using (myclass n = new myclass())
        {

            n.a = 10;
            cl = n;
        }

        int a = cl.a;// statement 1
    }
}

我希望語句1不起作用,因為cl對象已被釋放(n對象已被釋放)。 但是它有效。 那么,n個對象是否真的在語句1中被釋放?

沒有辦法顯式“釋放”托管對象。

Dispose()是一個完全普通的函數,旨在釋放非托管資源。
調用它根本不會影響GC。

.NET中的垃圾收集器確保只要存在對對象的任何種類的引用,它們就將繼續存在 (即使對於弱引用,這也是正確的;如果對對象的唯一引用是弱引用,則系統將使它們無效) ;到那時,該對象將沒有任何引用,並且該對象將不復存在。

Dispose的目的是將一個可能使用的對象更改為一個對象,該對象可能會讓外部實體代表它來做事,從而可能損害其他實體(例如,授予它對文件的獨占訪問權,使該文件對其他任何人都無法訪問)通過通知所有這樣的實體不再需要它們的“服務”,它不再有任何外部實體代表它做任何事情。 如果那些外部實體停止執行那些服務,則需要外部實體服務的對象通常將變得不可用,但是已處置對象變得不可用的事實並不是Dispose的目的 ,而僅僅是一個普遍的結果

您的屬性a是托管資源。 IDisposable是用於處理非托管代碼或資源的接口。

也許您期望物體被銷毀 這與處置不同。

暫無
暫無

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

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