2010-04-22 73 views
13

來自MSDN的引用:c#終結器拋出異常?

如果Finalize或重寫Finalize引發異常,則運行時會忽略該異常,終止該Finalize方法並繼續最終化過程。

然而,如果我有:

~Person() 
{ 
throw new Exception("meh"); 
} 

然後它會導致運行時異常?

p.s.我知道這絕不應該發生,但我只是對這種行爲感到好奇。我們的一位客戶有一個空的嘗試抓住他們所有的終結者。它甚至沒有記錄當事情出錯或重新對象:/

+2

無論如何您都不應該使用終結器。除非你確切地知道你爲什麼必須使用它,否則永遠不會。 – Dykam 2010-04-22 15:10:46

+0

「那麼它會導致運行時異常?」你是否說過你已經試過這個,並且確實會導致異常?還是你問我們測試這個? – AaronLS 2010-04-22 15:11:52

+1

它會導致運行時異常。 Dykam,謝謝你告訴我我永遠不應該使用終結者...大聲笑! – sjhuk 2010-04-22 15:15:27

回答

22

鏈接您的報價來源是重要的。我必須假設它談論的是舊版本的.NET,可能是1.x版本。它試圖對未處理的例外「寬容」,吞下它們而沒有吱吱聲。這樣做效果不好,大量代碼在默默無聞的情況下非常難以調試。

.NET 2.0版本結束了這一點,默認的CLR主機終止應用程序的任何未處理的異常。終結者中的例外是致命的。

+1

感謝Hans。我最初從新的O'Reilly .NET 4.0書中找到了引用,但引用來自.NET 1.1。也許他們應該更新這本書;)謝謝 – sjhuk 2010-04-22 15:24:11

+7

哇,糟糕的編輯。謹防本書的其餘部分。 – 2010-04-22 15:40:41

+2

MSDN鏈接:4.0 http://msdn.microsoft.com/en-us/library/system.object.finalize(v=VS.100).aspx 1.1 http://msdn.microsoft.com/en-us/庫/ system.object.finalize(v = VS.71)的.aspx – MPritchard 2011-02-11 07:35:30