उत्तर
हां, finally
ब्लॉक निष्पादित किया गया है हालांकि प्रवाह try
ब्लॉक छोड़ देता है - चाहे अंत तक पहुंचने, लौटने या अपवाद फेंकने से।
, अनुभाग 8.10:
एक अंत में ब्लॉक के बयान हमेशा क्रियान्वित कर रहे हैं जब नियंत्रण छोड़ देता है एक बयान का प्रयास करें। यह सच है कि ब्रेक, जारी रखें, गोटो, या रिटर्न कथन निष्पादित करने के परिणामस्वरूप, या प्रयास कथन के अपवाद को प्रसारित करने के परिणामस्वरूप, सामान्य निष्पादन के परिणामस्वरूप नियंत्रण स्थानांतरण होता है।
(धारा 8.10 इस पर एक बहुत अधिक विस्तार, निश्चित रूप से है।)
ध्यान दें कि से पहले अंत में ब्लॉक हालांकि निष्पादित किया जाता है वापसी मान निर्धारित किया जाता है, इसलिए यदि आप ऐसा किया:
int Test()
{
int result = 4;
try
{
return result;
}
finally
{
// Attempt to subvert the result
result = 1;
}
}
... मान 4 अभी भी वापस आ जाएगा, 1 नहीं - finally
ब्लॉक में असाइनमेंट का कोई प्रभाव नहीं पड़ेगा।
एक अंत में ब्लॉक हमेशा निष्पादित किया जाएगा और इस विधि से लौटने से पहले क्या होगा, तो आप सुरक्षित रूप से इस तरह कोड लिख सकते हैं:
try {
return "foo";
} finally {
// This will always be invoked
}
या आप डिस्पोजेबल संसाधनों के साथ काम कर रहे हैं अगर:
using (var foo = GetFoo())
{
// foo is guaranteed to be disposed even if an exception is thrown
return foo.Bar();
}
आपके उत्तर के लिए धन्यवाद! – Liu
सी-शार्प में प्रयास या पकड़ने वाले ब्लॉक से लौटने पर आखिरकार ब्लॉक को निष्पादित किया जाएगा?
हाँ
तो कहीं भी होगी, लौटने के बाद या पहले?
पहले
, आप ठीक नहीं कह सकता कि अंत में ब्लॉक से पहले नियंत्रण वापस फोन करने वाले के पास निष्पादित करता है।
आखिरकार ब्लॉक अधिक घोंसला वाले कॉल फ्रेम में अवरुद्ध होने के बाद निष्पादित हो जाएगा, और आखिरकार ब्लॉक और कम नेस्टेड कॉल फ्रेम में कैच ब्लॉक, जो लौटने से पहले अंत में चलने वाले ब्लॉक के साथ संगत है। लेकिन फेंक पॉइंट और कैच पॉइंट के बीच सभी अपवाद फ़िल्टर किसी भी आखिरकार ब्लॉक से पहले चलाए जाएंगे, जिसका मतलब है कि अपवाद की उपस्थिति में कुछ कॉलर कोड आखिरकार ब्लॉक से पहले चला सकते हैं।
जब नियंत्रण सामान्य रूप से ब्लॉक को छोड़ देता है (कोई अपवाद नहीं फेंक दिया जाता है), तो आखिर में कॉलर को नियंत्रण रिटर्न से पहले चला जाता है।
+1 क्योंकि अपवाद फ़िल्टर उल्लेखनीय हैं ... लेकिन अपवाद फ़िल्टर के साथ भी, कॉलर पर वापस नियंत्रण से पहले निश्चित रूप से आखिरकार ब्लॉक चल रहा है। यह सिर्फ इतना है कि अपवाद फ़िल्टर इससे पहले भी चला सकते हैं। –
ठीक है, नियंत्रण कॉलर के अपवाद फ़िल्टर को पास करता है, फिर आखिरकार ब्लॉक करने के लिए, फिर कॉलर के अपवाद हैंडलर पर। तो नियंत्रण अंततः ब्लॉक के पहले और बाद में कॉलर को पास करता है। –
- 1. कोशिश/पकड़ ब्लॉक में पूरा कोड
- 2. आखिरकार एक कोशिश/पकड़ ब्लॉक में "दायरे से बाहर"
- 3. यदि मैं कोशिश करता हूं/आखिरकार सी # में ब्लॉक करता हूं तो अंत में कोड हमेशा चलता है?
- 4. कैच ब्लॉक में फेंक दिया अपवाद बाद में पकड़ ब्लॉक द्वारा पकड़ा जाएगा?
- 5. ब्लॉक या कोशिश/पकड़ ब्लॉक को छोड़कर __try/__ का उपयोग करने के लिए बेहतर क्या है?
- 6. यदि आप जावा पृष्ठभूमि के साथ डेवलपर के रूप में अक्सर कोशिश/पकड़/आखिरकार ब्लॉक का उपयोग करते हैं तो
- 7. अंत में ब्लॉक क्यों कोड निष्पादित नहीं करता है?
- 8. '`try` या' कैच 'ब्लॉक के अंदर' वापसी 'होने पर' आखिरकार 'ब्लॉक निष्पादित किया गया है?
- 9. यदि ब्लॉक बनाम स्विच-केस ब्लॉक
- 10. 'अंत में' Iterators में ब्लॉक
- 11. अंत में ब्लॉक
- 12. मैं कोशिश/पकड़ ब्लॉक से एक चर कैसे प्राप्त करूं?
- 13. jQuery: जांच करें कि मान सरणी में है, यदि ऐसा है, तो हटाएं, यदि नहीं, तो
- 14. जावास्क्रिप्ट कोशिश, पकड़ ... और ... अंत में अजगर, जावा, रूबी की तरह ... आदि
- 15. क्या ऐसा कोई मामला है जब आखिरकार कोशिश करें अंततः ब्लॉक नहीं किया जाएगा?
- 16. सी में एक समारोह से एक enum लौट रहे हैं?
- 17. कैच ब्लॉक के माध्यम से फ़ंक्शन से लौट रहा है, आखिरकार ब्लॉक करने के लिए क्या होता है?
- 18. पकड़ ब्लॉक के बजाए प्रयास ब्लॉक में अपवाद फेंक दें?
- 19. पकड़ ब्लॉक में वापसी विवरण
- 20. ट्राई/अंत में ब्लॉक सवाल
- 21. सी # "या" घटना प्रतिनिधि बैल लौट रहे हैं
- 22. कोशिश को छोड़कर ब्लॉक
- 23. शर्तें जब अंत में किसी .NET में निष्पादित नहीं होती हैं तो कोशिश करें .. अंतिम रूप से
- 24. java.lang.OutOfMemoryError यहां तक कि एक कोशिश-पकड़ ब्लॉक में?
- 25. जावा कोशिश करें अंत में कैच के बिना ब्लॉक
- 26. Emacs यदि किसी और ब्लॉक
- 27. यदि कैच ब्लॉक में अपवाद होता है तो उसे सी # में कैसे संभालें?
- 28. कोशिश/पकड़ ब्लॉक का उपयोग कब करें?
- 29. एक कोशिश ब्लॉक के अंदर एक सिंक्रनाइज़ ब्लॉक या एक सिंक्रनाइज़ ब्लॉक के अंदर एक कोशिश ब्लॉक बेहतर है?
- 30. .NET में, कैच ब्लॉक में कुछ विफल होने पर क्या होता है, अंत में हमेशा कॉल किया जाएगा?
आपके उत्तर के लिए धन्यवाद! – Liu
यह नहीं कि यह वास्तव में बहुत व्यावहारिक महत्व है लेकिन आखिरकार ब्लॉक को निष्पादित नहीं किया जाता है यदि स्टैक ओवरफ्लो एक्सेप्शन होता है या यदि आप सिस्टम को कॉल करते हैं। पर्यावरण। फ़ेलफ़ास्ट (...) –
बेशक, नियंत्रण कॉलर पर वापस नहीं आता है उन मामलों में। आप ब्लॉक कहने के बजाए प्रवाह * समाप्त * कह सकते हैं, ताकि स्कीट का बयान अभी भी हो। –