अगर फेंकना System.Exceptionइतना बुरा माना जाता है, तो पहले स्थान पर क्यों नहीं Exceptionबनाया abstractगया?
इस तरह, कॉल करना संभव नहीं होगा:
throw new Exception("Error occurred.");
यह हुई त्रुटि का अधिक विवरण प्रदान करने के लिए व्युत्पन्न अपवादों का उपयोग करते हुए लागू होगा।
उदाहरण के लिए, जब मैं पुस्तकालय के लिए एक कस्टम अपवाद पदानुक्रम प्रदान करना चाहता हूं, तो मैं आमतौर पर एक अपवाद के लिए एक सार आधार वर्ग घोषित करता हूं:
public abstract class CustomExceptionBase : Exception
{
/* some stuff here */
}
और फिर एक अधिक विशिष्ट उद्देश्य के साथ कुछ व्युत्पन्न अपवाद:
public class DerivedCustomException : CustomExceptionBase
{
/* some more specific stuff here */
}
फिर किसी भी लाइब्रेरी मेथड पर कॉल करते समय, किसी को भी लाइब्रेरी से आने वाली किसी भी त्रुटि को पकड़ने के लिए यह सामान्य प्रयास / कैच ब्लॉक हो सकता है:
try
{
/* library calls here */
}
catch (CustomExceptionBase ex)
{
/* exception handling */
}
क्या यह अच्छा अभ्यास है?
क्या यह अच्छा होगा अगर Exceptionइसे अमूर्त बनाया गया?
संपादित करें: मेरा कहना यह है कि भले ही एक अपवाद वर्ग को चिह्नित किया जाए abstract, फिर भी आप इसे कैच-ऑल ब्लॉक में पकड़ सकते हैं। इसे अमूर्त बनाना केवल प्रोग्रामरों को "सुपर-वाइड" अपवाद को फेंकने के लिए मना करने का एक तरीका है। आमतौर पर, जब आप स्वेच्छा से एक अपवाद फेंकते हैं, तो आपको पता होना चाहिए कि यह किस प्रकार का है और ऐसा क्यों हुआ। इस प्रकार एक अधिक विशिष्ट अपवाद प्रकार फेंकने के लिए लागू करना।