यह संभव है VB में पकड़ने के लिए कुछ प्रकार का उपयोग करके इंटरफेस:
' Doesn't require external function, but will will require typecast
' if it needs to actually use Ex as IMyExceptionInterface
Catch Ex As Exception When TypeOf(Ex) Is IMyExceptionInterface
' Alternate form: requires pre-declared variable and a function:
' Function TryCastIntoSecondParam(Of TSource As Class, TDest As Class) _
' (ByVal Thing As TSource, ByRef Dest As TDest)
' Dim Result As TDest
' Result = TryCast(Thing, TDest)
' Dest = Result
' Return Dest IsNot Nothing
' End Function
Catch Ex As Exception When TryCastIntoSecondParam(Ex, myIMyException)
यदि वीबी या सी # कंपाइलर कार्यान्वयन करना चाहते थे ऐसा करने के लिए, वे एक वाक्यविन्यास
Catch Ex As IMyExceptionInterface ' vb
catch IExceptionInterface ex ' C#
का उपयोग करने और उपरोक्त कोड के साथ इसे लागू करने की अनुमति दे सकता है। कंपाइलर समर्थन के बिना भी, वीबी उपयोगकर्ता उपरोक्त कोड के साथ सही अर्थशास्त्र प्राप्त कर सकते हैं। सी # में, अपवाद को पकड़ना आवश्यक होगा, परीक्षण करें कि यह वांछित प्रकार है, और अगर यह नहीं है तो फिर से करें; पहली जगह में अपवाद को पकड़ने से बचने के लिए फ़िल्टर का उपयोग करने वाले लोगों के अर्थशास्त्र अलग-अलग हैं। ध्यान दें कि उपरोक्त संरचनाओं को लागू करने के लिए सी # कंपाइलर के लिए, इसे फ़िल्टर ब्लॉक का उपयोग करना होगा, लेकिन इसे प्रोग्रामर को फ़िल्टर ब्लॉक की सभी शक्तियों का खुलासा नहीं करना पड़ेगा - सी # कार्यान्वयनकर्ताओं ने जानबूझकर ऐसा करने से इंकार कर दिया है।
जो कुछ कहा जा रहा है, मुझे संदेह है कि मूल प्रश्न का उत्तर "डिजाइनर ऐसी चीज के लिए किसी भी अच्छे उपयोग के मामलों के बारे में सोच नहीं सकते", या हो सकता है कि "इंटरफेस को अधिक जटिल प्रकार के संकल्प की आवश्यकता हो कक्षाएं करते हैं, संभावना बनाते हैं कि अपवाद को पकड़ने का निर्णय लेने का केवल कार्य ही अपने अपवाद के साथ विफल हो सकता है। "
असल में, मुझे वर्ग के प्रकारों के उपयोग को नापसंद करने का एक तरीका के रूप में उपयोग करने के तरीके के रूप में नापसंद होता है, क्योंकि अपवाद को पकड़ना है या नहीं, इस सवाल के कारण अक्सर बड़े पैमाने पर ऑर्थोगोनल होता है कि इसका कारण क्या हुआ । यदि कोई दस्तावेज़ लोड करने का प्रयास विफल रहता है, तो मुझे इस सवाल में दिलचस्पी नहीं है कि क्या कुछ तर्क सीमा से बाहर था या कुछ सूचकांक सीमा से बाहर था, क्योंकि मैं इस सवाल में हूं कि क्या मैं प्रयास से सुरक्षित रूप से ठीक हो सकता हूं नाटक करके मैं इसे कभी नहीं बनाया था। वास्तव में क्या आवश्यक है अपवादों के लिए एक "गंभीरता" उपाय जिसे कॉल श्रृंखला को अपवाद बुलबुले के रूप में बढ़ाया या घटाया जा सकता है। ऐसी चीज vb.net में कुछ हद तक व्यावहारिक हो सकती है (जिसमें अपवाद फ़िल्टर हैं) लेकिन शायद सी # (जो नहीं) में नहीं है, लेकिन अंतर्निहित अपवादों के भीतर किसी भी समर्थन की कमी के कारण किसी भी मामले में सीमित होगा।
संपादित करें/परिशिष्ट
यह अगर एक एक DLL vb में लिखा का उपयोग करता है एक कोशिश/फिल्टर/पकड़/अंत में आवरण जो कुछ प्रतिनिधियों कॉल लागू करने के लिए एक सी # परियोजना के भीतर अपवाद फिल्टर का उपयोग करना संभव है। दुर्भाग्यवश, ऐसे डीएलएल का उपयोग करने के लिए रन-टाइम दक्षता और कोड की योग्यता के बीच कुछ ट्रेडऑफ की आवश्यकता होगी। मैंने मनमाने ढंग से इंटरफेस को पकड़ने के विशेष अनुकूलित उद्देश्य के लिए ऐसे डीएलएल को लागू करने के बारे में सोचा नहीं था; मुझे नहीं पता कि डीएलएल में ऐसी कार्यक्षमता को शामिल करने का कोई फायदा होगा या नहीं, यह जांचने के लिए कि यह एक अपवाद पकड़ा जाना चाहिए या नहीं, यह जांचने के लिए इसे लैम्ब्डा अभिव्यक्ति या अज्ञात विधि से गुजरना है।
बीटीडब्लू, एक और विशेषता एक रैपर प्रदान कर सकती है जो अन्यथा गायब हो जाती है जो डबल-गलती की स्थिति की रिपोर्ट करने की क्षमता है (मुख्य पंक्ति में एक अपवाद होता है, और बाद में "आखिरकार" ब्लॉक के दौरान एक और अपवाद होता है) प्रारंभिक अपवाद पकड़ने के लिए। जब अंत में ब्लॉक में अपवाद होता है, तो आम तौर पर मुख्य लाइन में होने वाले अपवाद की तुलना में यह एक बड़ी समस्या होती है, और इस प्रकार इसे नहीं दबाया जाना चाहिए, लेकिन कॉल स्टैक को प्रतिबिंबित करने के लिए "आखिरकार ब्लॉक" अपवाद की अनुमति देना आम तौर पर किसी सबूत को नष्ट कर देगा मूल अपवाद का।जबकि आस-पास के कोड मूल अपवाद की तुलना में क्लीनअप विफलता में अधिक रुचि रखते हैं, दोनों अपवादों को लॉग करना मूल को बाधित करने से कहीं अधिक उपयोगी है।
तुम्हें पता है कि आप बस ('पकड़ में' is' ऑपरेटर इस्तेमाल कर सकते हैं अपवाद पूर्व) ', है ना? 'अगर (ex ilgedgedException है)' – xanatos
@xanatos: लेकिन यह सुविधा – sll
@xanatos हाँ में निर्मित के बजाय एक हैक/काम है, इसके बारे में भी पोस्ट करने के बाद ही, लेकिन मैं व्यक्तिगत रूप से इस तरह कुछ देखना पसंद करूंगा भविष्य में रिलीज में ... शायद हम इसे कर सकते हैं! – danielrbradley