यह प्रश्न किसी ओओ प्रोग्रामिंग भाषा पर लागू करने का इरादा है जो अपवाद से निपटने का समर्थन करता है; मैं केवल उदाहरण के लिए C # का उपयोग कर रहा हूं।
अपवाद आमतौर पर उठाए जाने का इरादा होता है जब एक समस्या उत्पन्न होती है कि कोड तुरंत संभाल नहीं सकता है, और फिर catch
एक अलग स्थान (आमतौर पर एक बाहरी स्टैक फ्रेम) में एक खंड में पकड़ा जा सकता है ।
प्रश्न: क्या ऐसी कोई वैध परिस्थितियाँ हैं जहाँ अपवादों को फेंका और पकड़ा नहीं जाता है, लेकिन बस एक विधि से लौटा दिया जाता है और फिर त्रुटि वस्तुओं के रूप में चारों ओर से गुजरता है?
यह प्रश्न मेरे लिए आया क्योंकि .NET 4 की System.IObserver<T>.OnError
विधि केवल यह बताती है कि: अपवादों को त्रुटि ऑब्जेक्ट के रूप में पास किया जा रहा है।
आइए एक और परिदृश्य देखें, सत्यापन। मान लें कि मैं पारंपरिक ज्ञान का पालन कर रहा हूं, और इसलिए मैं एक त्रुटि ऑब्जेक्ट प्रकार IValidationError
और एक अलग अपवाद प्रकार के बीच अंतर कर रहा हूं ValidationException
जिसका उपयोग अनपेक्षित जानकारी रिपोर्ट करने के लिए किया जाता है:
partial interface IValidationError { }
abstract partial class ValidationException : System.Exception
{
public abstract IValidationError[] ValidationErrors { get; }
}
( System.Component.DataAnnotations
नाम स्थान कुछ ऐसा ही करता है।)
इन प्रकारों को निम्नानुसार नियोजित किया जा सकता है:
partial interface IFoo { } // an immutable type
partial interface IFooBuilder // mutable counterpart to prepare instances of above type
{
bool IsValid(out IValidationError[] validationErrors); // true if no validation error occurs
IFoo Build(); // throws ValidationException if !IsValid(…)
}
अब मैं सोच रहा हूँ, क्या मैं इसे सरल नहीं बना सकता:
partial class ValidationError : System.Exception { } // = IValidationError + ValidationException
partial interface IFoo { } // (unchanged)
partial interface IFooBuilder
{
bool IsValid(out ValidationError[] validationErrors);
IFoo Build(); // may throw ValidationError or sth. like AggregateException<ValidationError>
}
प्रश्न: इन दो अलग-अलग तरीकों के फायदे और नुकसान क्या हैं?
AggregateException
इसके बजाय फेंकने के मामले में आपका क्या मतलब है ? अच्छी बात।