यदि आप केवल सामान्य अपवाद का उपयोग करते हैं तो आप कभी भी अपने अपवाद के विशिष्ट अपवादों को फंसाने में सक्षम नहीं होंगे। यदि आप केवल
try
{
}
catch (Exception ex)
{
}
विशिष्ट त्रुटियों के लिए फ़िल्टर करने में सक्षम होने के बिना आप प्रत्येक अपवाद को पकड़ लेंगे।
एक अन्य कारण मैं एक कस्टम अपवाद बनाने आवेदन विशिष्ट अपवाद यह है कि कई कारणों से हो सकता को संभालने के लिए है। यह एक कस्टम अपवाद फेंकने का मतलब है लेकिन अपवाद से जुड़े संदेश को अनुकूलित करें। यह मुझे एक और स्तर की त्रुटि प्रबंधन देता है जो मेरे विशिष्ट अनुप्रयोग के लिए है।
उदाहरण के लिए मैं एक enigineering अनुप्रयोग है कि बेल्ट ड्राइव सिस्टम आकार की है। अन्य लोगों के उपयोग के लिए डीएलएल भी उपलब्ध है। मेरे पास एक अपवाद अपवाद है जिसे चयन में त्रुटि होने पर फेंक दिया जाता है। त्रुटि का कारण कई कारणों से हो सकता है (अमान्य ड्राइव की गति, गलत अश्वशक्ति आवश्यकताओं, आदि)। चूंकि विफलता के कई कारण हैं, इसलिए एक कस्टम एप्लिकेशन अपवाद मुझे विफलता के लिए विशिष्ट विवरण देने की अनुमति देता है।
यह मुझे उपयोगकर्ताओं को दस्तावेज़ करने की अनुमति देता है कि विधि कॉल एप्लिकेशन विशिष्ट अपवादों को फेंक देगा जिन्हें उन्हें संभालने की आवश्यकता है।
यदि आपकी विरासत अपवाद वर्ग उस बेस क्लास में रचनाकारों को कार्यान्वित करना सुनिश्चित करता है जिसमें संदेश, संदेश + आंतरिक अपवाद और क्रमबद्ध अपवाद है।
यहां मेरे पास एक उदाहरण है।
/// <summary>
/// Drive error exception class. Thrown when a drive selection error has occured.
/// </summary>
[Serializable]
public class DriveException : ApplicationException
{
/// <summary>
/// Default constructor.
/// </summary>
public DriveException()
{
}
/// <summary>
/// Constructor used with a message.
/// </summary>
/// <param name="message">String message of exception.</param>
public DriveException(string message)
: base(message)
{
}
/// <summary>
/// Constructor used with a message and an inner exception.
/// </summary>
/// <param name="message">String message of exception.</param>
/// <param name="inner">Reference to inner exception.</param>
public DriveException(string message, Exception inner)
: base(message, inner)
{
}
/// <summary>
/// Constructor used in serializing the data.
/// </summary>
/// <param name="info">Data stored to serialize/de-serialize</param>
/// <param name="context">Defines the source/destinantion of the straeam.</param>
public DriveException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
स्रोत
2009-06-23 14:13:20
मैं केवल एक सामान्य सीमा से अधिक चीजों के लिए परीक्षण कर रहा हूं। उदाहरण के लिए tesitng अगर कोई तर्क किसी ऐसे राज्य में है जो दृढ़ता की अनुमति देता है। इस मामले में यह एक तर्क की जांच कर रहा है लेकिन रैली मैं ArgumentNotInPersitableState नामक एक और विशिष्ट अपवाद चाहता हूं या थॉस लाइन – Sruly
के साथ कुछ विशेष मामले के लिए मैं सीधे अपवाद का वारिस करूंगा। –
क्या आपके कॉलर्स आपके विशिष्ट अपवाद को पकड़ेंगे? यदि नहीं, तो आपको अपने अपवाद प्रकार की आवश्यकता नहीं है। बस अपना खुद का संदेश इस्तेमाल करें। –