.NET समाधान में अपवाद कक्षाएं बनाते समय सबसे अच्छा अभ्यास क्या है: System.Exception
से या System.ApplicationException
से प्राप्त करने के लिए?क्या मुझे .NET में अपवाद या एप्लिकेशन अपवाद से कस्टम अपवाद प्राप्त करना चाहिए?
उत्तर
फ्रेमवर्क डिजाइन दिशानिर्देश पुस्तक में जेफ़री रिक्टर के अनुसार:
System.ApplicationException
एक वर्ग जो .NET ढांचे का हिस्सा नहीं होना चाहिए।
इसका उद्देश्य कुछ अर्थ होना था कि आप संभावित रूप से "सभी" एप्लिकेशन अपवादों को पकड़ सकते हैं, लेकिन पैटर्न का पालन नहीं किया गया था और इसलिए इसका कोई मूल्य नहीं है।
ApplicationException
considered uselessApplicationException
के खिलाफ एक मजबूत, और महत्वपूर्ण, तर्क है।
उपशॉट: इसका उपयोग न करें। Exception
से प्राप्त करें।
हाँ, कोनराड यह अधिकार नहीं है। संबंधित नोट पर: एक और चीज उपयोगी (या "सर्वोत्तम अभ्यास") सोचती है लेकिन वास्तव में नहीं है [आईसीएलनेबल लागू करना] (http://blogs.msdn.com/brada/archive/2003/04/09/49935.aspx)। – Craig
ढांचे के लेखकों ने खुद को ApplicationException बेकार पर विचार करें:
http://blogs.msdn.com/kcwalina/archive/2006/07/05/657268.aspx
संदेह होने पर, मैं अपनी किताब फ्रेमवर्क डिजाइन का पालन करें: एक अच्छा अनुवर्ती यहाँ के साथ
http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspx
दिशा-निर्देश।
http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756
ब्लॉग पोस्ट के विषय आगे वहाँ चर्चा की है।
आरपी
मैं ऐसा करने के लिए इस्तेमाल कर रहा हूँ:
- सी # कोड सिस्टम त्रुटि मरम्मत कि मैं करना होगा:
private void buttonFoo_Click() { try { foo(); } catch(ApplicationException ex) { Log.UserWarning(ex); MessageVox.Show(ex.Message); } catch(Exception ex) { Log.CodeError(ex); MessageBox.Show("Internal error."); } }
यह बीच का अंतर करने के लिए अनुमति देते हैं।
- "सामान्य" उपयोगकर्ता त्रुटि जो मुझे सुधार की आवश्यकता नहीं है।
मुझे पता है कि एप्लिकेशन अपवाद का उपयोग करने की अनुशंसा नहीं की जाती है, लेकिन यह very few classes है जो अनुप्रयोग अपवाद पैटर्न का सम्मान नहीं करता है क्योंकि यह बहुत अच्छा काम करता है।
बहुत कम जो आप जानते हैं। फ्रेमवर्क डिज़ाइन दिशानिर्देशों का पालन करने वाले कोई भी एप्लिकेशन अपवाद से नहीं प्राप्त होगा। यदि आप इस पैटर्न को बनाए रखना चाहते हैं, तो आपको MyAplicationExcptionBase जैसे अपना स्वयं का प्रकार बनाना होगा और उससे अपने सभी कस्टम अपवाद प्राप्त करना होगा। बीटीडब्ल्यू, दिशानिर्देश कुछ व्युत्पन्न अपवाद प्रकार बनाने के लिए कहते हैं। –
आप सही: आज, अगर मुझे खरोंच से शुरू करना पड़ा, तो मैं एक "उपयोगकर्ता त्रुटि" अपवाद तैयार करूंगा। फिर भी, मैं अपने पुराने कोड को दोबारा नहीं बदलूंगा: यह बहुत आलोचना नहीं है। –
आपको System.Exception
से कस्टम अपवाद प्राप्त करना चाहिए।
यहां तक कि MSDN अब ApplicationException
अनदेखी करने के लिए कहते हैं:
आप किसी अनुप्रयोग अपनी ही अपवाद बनाने की जरूरत है कि रचना कर रहे हैं, तो आप अपवाद वर्ग से कस्टम अपवाद प्राप्त करने के लिए सलाह दी जाती है।यह मूल रूप से सोचा गया था कि कस्टम अपवाद एप्लिकेशन अपवाद वर्ग से प्राप्त होना चाहिए; हालांकि अभ्यास में यह महत्वपूर्ण मूल्य जोड़ने के लिए नहीं मिला है। अधिक जानकारी के लिए, Best Practices for Handling Exceptions देखें।
http://msdn.microsoft.com/en-us/library/system.applicationexception.aspx
उद्धरण कहता है कि, लेकिन ठीक है, अधिक स्पष्ट होने के लिए संपादित किया गया है। – Blorgbeard
- 1. कस्टम अपवाद वर्ग - अपवाद या थॉवेबल से विस्तारित है?
- 2. कस्टम अपवाद
- 3. क्या मेरे कस्टम अपवादों को उनके जैसा ही अपवाद होना चाहिए या बस अपवाद से प्राप्त होना चाहिए?
- 4. एप्लिकेशन अपवाद और सिस्टम अपवाद
- 5. सी # क्या मुझे अपवाद तक लूप चाहिए?
- 6. सी # मुझे यहां क्या अपवाद उठाना चाहिए?
- 7. अपवाद में पायथन अपवाद
- 8. अनचेक अपवाद या रनटाइम अपवाद
- 9. क्लोजर में कस्टम अपवाद?
- 10. मुझे हमेशा अपने अपवाद [serializable] क्यों बनाना चाहिए? (.NET)
- 11. कस्टम अपवाद फेंक दिया गया है अगर कस्टम अपवाद
- 12. सी #, मेट्रो एप्लिकेशन, कस्टम अपवाद वर्ग
- 13. .NET अनुप्रयोग "अपवाद प्रसंस्करण संदेश" में Vista अपवाद
- 14. सी ++ में मानक या कस्टम अपवाद?
- 15. ऑटोमैपर कस्टम मैपिंग अपवाद
- 16. .NET कैच सामान्य अपवाद
- 17. डब्ल्यूसीएफ - एक अपवाद या फॉल्ट अपवाद फेंको?
- 18. अपवाद
- 19. मुझे किस प्रकार का अपवाद फेंकना चाहिए?
- 20. PostgreSQL कस्टम अपवाद शर्तें
- 21. अपवाद
- 22. कस्टम अपवाद प्रकार
- 23. रेल 3 कस्टम अपवाद
- 24. AspectJ से वापसी मूल्य या अपवाद प्राप्त करना?
- 25. डीडीडी में जहां कस्टम अपवाद (एप्लिकेशन अपवाद) रखना है? इंफ्रास्ट्रक्चर परत में?
- 26. सीरियलाइजेशन अपवाद जब .NET
- 27. कस्टम अपवाद फेंक
- 28. जब मुझे अपवाद
- 29. अपवाद
- 30. क्या अपवाद केस कक्षाएं होनी चाहिए?
जब कोई एमसीटीएस 70-536 परीक्षा के लिए माइक्रोसॉफ्ट प्रेस सामग्री को समझता है तो अविश्वसनीय रूप से विपरीत कहता है ... गह! –
एमएस परीक्षा पुस्तकों पर पूरी तरह भरोसा न करें। मैंने उनमें से कुछ पढ़ा है - हमेशा त्रुटियों से भरा है। – user1068352
यह वास्तव में सवाल का जवाब नहीं देता है। क्या आप कह रहे हैं कि कस्टम अपवाद अपवाद 'अपवाद' से प्राप्त होना चाहिए? यदि हां, तो क्या आप ऐसा कह सकते हैं? –