2010-04-22 17 views
13

एमएसडीएन से उद्धरण:सी # फ़ाइनलाइज़र फेंकने अपवाद?

अगर अंतिमकरण का अंतिम रूप या ओवरराइड अपवाद फेंकता है, तो रनटाइम अपवाद को अनदेखा करता है, टर्मिनल विधि को समाप्त करता है, और अंतिमकरण प्रक्रिया जारी रखता है।

फिर भी अगर मेरे पास है:

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

तो यह एक क्रम अपवाद में परिणाम है?

पेज। मुझे पता है कि यह कभी नहीं होना चाहिए, हालांकि मैं इस व्यवहार के आसपास उत्सुक हूं। हमारे ग्राहकों में से एक उनके finalizers के चारों ओर एक खाली कोशिश पकड़ था .. तो यह और भी लोग इन नहीं किया जब चीजें गलत हो गया था या वस्तु reserect:/

+2

आप finalizers वैसे भी उपयोग कभी नहीं करना चाहिए। कभी भी, जब तक आप बिल्कुल नहीं जानते कि आपको इसका उपयोग क्यों करना है। – Dykam

+0

"तो यह एक रनटाइम अपवाद में परिणाम देता है?" क्या आप कह रहे हैं कि आपने यह कोशिश की है और इसका परिणाम अपवाद है? या आप हमसे परीक्षण करने के लिए कह रहे हैं? – AaronLS

+1

यह एक रनटाइम अपवाद में परिणाम होता है। डिकम, मुझे बताने के लिए धन्यवाद मुझे कभी भी अंतिमकरण का उपयोग नहीं करना चाहिए ... lol! – sjhuk

उत्तर

22

लिंक करके आप अपनी बोली के स्रोत महत्वपूर्ण है। मुझे यह मानना ​​है कि यह .NET के पुराने संस्करण, शायद संस्करण 1.x के बारे में बात करता है। यह अनचाहे अपवादों के "सहिष्णु" होने की कोशिश की, बिना किसी स्केक के निगल लिया। यह अच्छी तरह से काम नहीं करता था, चुपचाप असफल कोड के टुकड़े डीबग करने के लिए असाधारण मुश्किल है।

.NET 2.0 संस्करण को समाप्त कर दिया, डिफ़ॉल्ट CLR होस्ट को किसी भी बिना क्रिया का अपवाद के लिए एप्लिकेशन समाप्त हो जाता है। फाइनल में एक अपवाद घातक है।

+1

धन्यवाद हंस। मुझे मूल रूप से नई O'Reilly .NET 4.0 पुस्तक से उद्धरण मिला, हालांकि उद्धरण .NET 1.1 से था। शायद उन्हें पुस्तक को अपडेट करना चाहिए;) धन्यवाद – sjhuk

+7

वाह, लुसी संपादन। बाकी की किताब से सावधान रहें। –

+2

एमएसडीएन लिंक: 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

संबंधित मुद्दे