4 回答

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
?是析構(gòu)函數(shù)
析構(gòu)函數(shù)是自動調(diào)用的,不能顯式調(diào)用。
析構(gòu)函數(shù)不能重載。因此,一個(gè)類最多可以具有一個(gè)析構(gòu)函數(shù)。
析構(gòu)函數(shù)不會被繼承。因此,一個(gè)類除了可以在其中聲明的析構(gòu)函數(shù)外,沒有其他析構(gòu)函數(shù)。
析構(gòu)函數(shù)不能與結(jié)構(gòu)一起使用。它們僅與類一起使用。當(dāng)不再有任何代碼使用該實(shí)例時(shí),該實(shí)例就可以銷毀。
在實(shí)例符合銷毀條件后的任何時(shí)候都可以執(zhí)行該實(shí)例的析構(gòu)函數(shù)。
當(dāng)實(shí)例被銷毀時(shí),其繼承鏈中的析構(gòu)函數(shù)按從最大派生到最小派生的順序被調(diào)用。
完成
在C#中,F(xiàn)inalize方法執(zhí)行標(biāo)準(zhǔn)C ++析構(gòu)函數(shù)將執(zhí)行的操作。在C#中,您沒有將其命名為Finalize,而是使用C ++析構(gòu)函數(shù)語法在類名之前放置一個(gè)波浪號(?)符號。
處理
最好將對象放置在類的用戶可以顯式調(diào)用的Close()
或Dispose()
方法中。GC調(diào)用Finalize(析構(gòu)函數(shù))。
該IDisposable的界面告訴你的類保存到了需要配置資源,并為用戶提供一種方式來釋放他們的世界。如果確實(shí)需要在類中實(shí)現(xiàn)終結(jié)器,則Dispose方法應(yīng)使用該GC.SuppressFinalize()
方法來確保實(shí)例的終結(jié)被抑制。
使用什么?
顯式調(diào)用析構(gòu)函數(shù)是非法的。您的析構(gòu)函數(shù)將被垃圾收集器調(diào)用。如果確實(shí)要處理您想盡快關(guān)閉并處置的寶貴的非托管資源(例如文件句柄),則應(yīng)實(shí)現(xiàn)IDisposable接口。

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
這是終結(jié)器。老實(shí)說,您幾乎不需要編寫終結(jié)器。在以下情況下,您實(shí)際上只需要寫一個(gè):
您可以直接訪問非托管資源(例如通過
IntPtr
),而不能使用SafeHandle
它,這將使訪問變得更容易您正在
IDisposable
未密封的類中實(shí)現(xiàn)。(我傾向于密封類,除非它們是為繼承而設(shè)計(jì)的。)在這種情況下,終結(jié)器是規(guī)范的Dispose模式的一部分。

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
語法元素被適當(dāng)?shù)胤Q為析構(gòu)函數(shù)。如果類具有析構(gòu)函數(shù),則C#編譯器將自動生成一個(gè)終結(jié)器,該終結(jié)器包括一個(gè)通常無用的try/finally
塊,以確保Finalize
調(diào)用父方法。析構(gòu)函數(shù)的大多數(shù)情況適用于終結(jié)器,反之亦然,但這兩個(gè)詞的含義略有不同。
- 4 回答
- 0 關(guān)注
- 1767 瀏覽
添加回答
舉報(bào)