c# - Catching exceptions thrown in the constructor of the target object of a Using block -
का उपयोग करते हुए (कुछ क्लास x = नया कुछ क्लास ("c: /temp/test.txt"))। ।}
उपयोग के ब्लॉक के अंदर, सभी सामान्य रूप में अपवादों के उपचार के साथ ठीक है। लेकिन क्या होगा अगर SomeClass
के निर्माता अपवाद फेंक सकते हैं?
हां , यह एक समस्या होगी जब कन्स्ट्रक्टर एक अपवाद फेंकता है आप जो भी कर सकते हैं वह उपयोग ब्लॉक को एक प्रयास / कैच ब्लॉक में लपेटता है। यही कारण है कि आपको इसे ऐसा करना चाहिए।
ब्लॉकों का उपयोग करना वाक्यों में केवल शर्करात्मक चीनी है और संकलक प्रत्येक का उपयोग करते हुए बराबर प्रयास / अंतिम ब्लॉक के साथ ब्लॉक एकमात्र मुद्दा यह है कि कंपाइलर कंट्रोल ब्लॉक के अंदर कन्स्ट्रक्टर को लपेट नहीं करता है। संकलन के बाद आपका कोड आईएल में रूपांतरण होगा।
// प्रकार की ऑब्जेक्ट एक्स कुछ क्लास कुछ क्लास x; // कन्स्ट्रक्टर को कॉल करके ऑब्जेक्ट को इंस्टाइएट करें X = नया कुछ क्लास ("c: /temp/test.txt"); कोशिश {/ / एक्स पर कुछ काम करते हैं } अंत में {if (x! = Null) x.Dispose (); }
जैसा कि आप कोड से देख सकते हैं, ऑब्जेक्ट एक्स को तत्काल नहीं किया जाएगा जब कन्स्ट्रक्टर एक अपवाद फेंकता है और नियंत्रण अपवाद के बिंदु से आगे नहीं बढ़ेगा यदि नहीं तो संभाला।
मैंने अभी कल रात इस विषय पर एक पोस्ट किया है।
मैं अभी सोच रहा हूं कि सी # मुझे करने के लिए किया जाना चाहिए था।
संपादित करें
मुझे लगता है मुझे जवाब मिल गया है कि क्यों सी # ऑब्जेक्ट निर्माण को कोशिश ब्लॉक में जगह नहीं है ब्लॉक का उपयोग कर।
कारण सरल है अगर आप कोशिश ब्लॉक के भीतर घोषणा और तत्काल दोनों को लपेटते हैं तो कार्यवाही अंततः ब्लॉक
के लिए ऑब्जेक्ट के दायरे से बाहर हो जाएगा और कोड पर संकलन नहीं होगा, क्योंकि अंत में ऑब्जेक्ट को अवरोधित करने के लिए शायद ही मौजूद है। अगर आप केवल कोशिश ब्लॉक में निर्माण लपेटते हैं और कोशिश ब्लॉक से पहले घोषणा करते हैं, तो उस मामले में भी यह संकलन नहीं करेगा क्योंकि यह आपको एक असाइन किए गए वैरिएबल का उपयोग करने की कोशिश कर रहा है
।
Comments
Post a Comment