यदि मैं "उपयोग" निर्माण का उपयोग करता हूं, तो मुझे पता है कि ऑब्जेक्ट स्वचालित रूप से निपटाया जाता है। क्या होता है यदि "उपयोग" निर्माण के अंदर एक बयान एक अपवाद उठाता है। क्या "उपयोग" ऑब्जेक्ट अभी भी निपटाया गया है? अगर ऐसा हैं तोह कब?"उपयोग" निर्माण के बारे में मूल
उत्तर
एक using
ब्लॉक बदल जाती है - संकलक द्वारा - यह करने के लिए:
DisposableType yourObj = new DisposableType();
try
{
//contents of using block
}
finally
{
((IDisposable)yourObj).Dispose();
}
finally
ब्लॉक में Dispose()
कॉल डाल करके, यह सुनिश्चित करता है Dispose
हमेशा है कहा जाता है - जब तक कि बेशक अपवाद पर होता है तत्काल साइट, क्योंकि यह try
के बाहर होती है।
यह याद रखना महत्वपूर्ण है कि using
एक विशेष प्रकार का ऑपरेटर या निर्माण नहीं है - यह कुछ ऐसा है जो संकलक कुछ और चीज़ों के साथ बदलता है जो थोड़ी अधिक उलझन में है।
This article explains it nicely.
आंतरिक रूप से, यह बुरा लड़का एक कोशिश/अंत में वस्तु के आसपास आवंटित किया जा रहा उत्पन्न करता है और निपटान() आप के लिए कहता है। यह आपको मैन्युअल रूप से कोशिश/आखिरकार ब्लॉक बनाने और निपटान() को कॉल करने की परेशानी बचाता है।
असल में ब्लॉक का उपयोग करने का प्रयास करने के लिए समतुल्य है - अंततः ब्लॉक, जो सुनिश्चित करता है कि आखिर में हमेशा निष्पादित होगा उदा।
using (SqlConnection con = new SqlConnection(ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("Command", con))
{
con.Open();
cmd.ExecuteNonQuery();
}
}
SqlConnection con = null;
SqlCommand cmd = null;
try
{
con = new SqlConnection(ConnectionString);
cmd = new SqlCommand("Command", con);
con.Open();
cmd.ExecuteNonQuery();
}
finally
{
if (null != cmd);
cmd.Dispose();
if (null != con)
con.Dispose();
}
- 1. लिस्प में एसोसिएशन सूची के बारे में मूल प्रश्न
- 2. अंतिम कीवर्ड के बारे में जावा मूल बातें
- 3. PHP के मूल गेटटेक्स्ट का उपयोग स्वयं निर्माण के विरुद्ध करने या उपयोग करने के कारण क्या हैं?
- 4. पाइथन नामस्थानों के बारे में
- 5. उत्पत्ति के बारे में उत्पत्ति: मूल उत्पत्ति नीति के संबंध में खाली
- 6. हास्केल - करीबी के बारे में
- 7. के बारे में C++
- 8. के बारे में * argv []
- 9. रेंडरस्क्रिप्ट के बारे में
- 10. स्ट्रिंग concatenation के साथ एक्सएमएल निर्माण के बारे में इतना बुरा क्या है?
- 11. एंड्रॉइड: बिटमैप्स, मेमोरी उपयोग और स्केलिंग के बारे में प्रश्न
- 12. डिजस्ट्रा के पेपर के बारे में
- 13. बहु-जीपीयू मूल उपयोग
- 14. प्रश्न SharedInstance के बारे में
- 15. अमेज़ॅन आरडीएस, एस 3 स्टोरेज, और डिफ़ॉल्ट आरडीएस टेबल्स के बारे में मूल प्रश्न
- 16. के बारे में बताएं System.Diagnostics.CodeAnalysis.SuppressMessage
- 17. निर्माण घटनाओं में कंपाइलर स्थिरांक का उपयोग
- 18. रेल: उपज के बारे में
- 19. मैनिफेस्ट फ़ाइल के बारे में
- 20. टीम निर्माण सर्वर पर वीसीएस मुद्दे के बारे में मुझे कैसे सूचित किया जा सकता है?
- 21. पायथन के बारे में कुछ बुनियादी स्पष्टीकरण?
- 22. PHPUnit- उत्पन्न कंकाल परीक्षण वर्ग: मूल वर्ग के बारे में त्रुटि
- 23. नामस्थान क्या हैं? उपयोग के बारे में क्या?
- 24. जीसी.कोलेक्ट() का उपयोग करने के बारे में क्या गलत है?
- 25. कमांड डिजाइन पैटर्न का उपयोग करने के बारे में सोच
- 26. जावा सबिनटरफेस उप प्रकार के बारे में
- 27. grails फ़िल्टर के बारे में प्रश्न
- 28. जावा क्लोनेबल के बारे में
- 29. reCAPTCHA के बारे में -20px
- 30. प्रतिनिधियों के बारे में प्रश्न
यह भी ध्यान दें कि, के रूप में अपने उदाहरण दिखाता है, यदि DisposableType() करने के लिए कॉल एक अपवाद फेंकता है, निपटान() कहा जाता है नहीं दिखाया जाएगा के बराबर है; अपवाद से पहले आवंटित किसी भी संसाधन को जारी नहीं किया जाएगा। – Ben
@ बेन बहुत सच है। मैं स्पष्ट रूप से इसे इंगित करूंगा। –
'अंत में' ब्लॉक में भी 'शून्य' परीक्षण है। – Ani