सी # में मैं अपने स्वयं के अपवाद कैसे परिभाषित करूं?सी # में मैं अपने स्वयं के अपवाद कैसे परिभाषित करूं?
उत्तर
ऐसा लगता है कि मैं एक अपवाद sublcassing लड़ाई का एक सा शुरू कर दिया है। माइक्रोसॉफ्ट बेस्ट प्रैक्टिस गाइड के आधार पर आप अनुसरण करते हैं ... आप या तो सिस्टम से प्राप्त कर सकते हैं। अपवाद या सिस्टम। आवेदन अपवाद। एक अच्छा (लेकिन पुराना) ब्लॉग पोस्ट है जो भ्रम को दूर करने की कोशिश करता है। मैं अब के लिए अपवाद के साथ अपने उदाहरण रहेंगे, लेकिन आप पढ़ सकते हैं पद और आपको क्या चाहिए के आधार पर चुना:
http://weblogs.asp.net/erobillard/archive/2004/05/10/129134.aspx
कोई और एक लड़ाई है!
CA1058: Types should not extend certain base types
एक नया वर्ग है कि अपवाद से विरासत को परिभाषित करें (मैं कर दिया है: जिसमें कहा गया है कि अपने अपवाद System.Exception बजाय System.ApplicationException से विरासत चाहिए FxCop नियम CA1058 ओर इशारा करते हुए के लिए फ्रेडरिक के लिए धन्यवाद कुछ निर्माताओं शामिल हैं ... लेकिन आप) उन्हें नहीं करना पड़ेगा: फेंकने के लिए अपने कोड में
using System;
using System.Runtime.Serialization;
[Serializable]
public class MyException : Exception
{
// Constructors
public MyException(string message)
: base(message)
{ }
// Ensure Exception is Serializable
protected MyException(SerializationInfo info, StreamingContext ctxt)
: base(info, ctxt)
{ }
}
और कहीं:
throw new MyException("My message here!");
संपादित
एक Serializable अपवाद सुनिश्चित करने के लिए परिवर्तन के साथ अपडेट किया गया। चरणों अगर आप अपने अपवाद वर्ग के लिए कस्टम गुण जोड़ने लिया जाना चाहिए कि के बारे में अनुभाग के लिए
Winterdom Blog Archive - Make Exception Classes Serializable
वेतन ध्यान: विवरण यहां पाया जा सकता।
इगोर के लिए मुझे कॉल करने के लिए धन्यवाद!
@ रोबिन ... संपादन के लिए धन्यवाद। मुझे एहसास हुआ कि मैं कोड के रूप में प्रारूपित करना भूल गया था और यह पहले ही तय हो गया था। –
@ जस्टिन निसेनर: यदि आप इसे AppDomains –
पर फेंकने में सक्षम होना चाहते हैं तो आपको अपना कस्टम अपवाद सीरियलज़ेबल बनाना होगा। एप्लिकेशन अपवाद से प्राप्त करने की अनुशंसा नहीं की जाती है। यह आपके विरासत पदानुक्रम को किसी भी अच्छे कारण के लिए बढ़ाता है। http://blogs.msdn.com/brada/archive/2004/03/25/96251.aspx और http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspx – Venr
को परिभाषित करने के लिए:
public class SomeException : Exception
{
// Add your own constructors and properties here.
}
फेंक करने के लिए:
throw new SomeException();
धन्यवाद !!!!!!!!!!!!!! –
आप 'try' और' कुछ अपवाद() पकड़ सकते हैं; '। टक्कर बीटीडब्ल्यू। –
परिभाषा:
public class CustomException : Exception
{
public CustomException(string Message) : base (Message)
{
}
}
फेंक:
throw new CustomException("Custom exception message");
दिशानिर्देश अपने स्वयं के अपवाद
- यकीन है कि वर्ग, serializable है
[Serializable]
विशेषता आम कंस्ट्रक्टर्स कि द्वारा किया जाता है प्रदान करते हैं जोड़कर बनाना (तथ्य यह है कि अपने वर्ग अपवाद से विरासत चाहिए करने के लिए अगले) बनाने के लिए अपवाद:
MyException(); MyException (string message); MyException (string message, Exception innerException);
तो, आदर्श, अपने कस्टम Exception
कम से कम इस तरह दिखना चाहिए:
[Serializable]
public class MyException : Exception
{
public MyException()
{}
public MyException (string message)
: base(message)
{}
public MyException (string message, Exception innerException)
: base (message, innerException)
{}
}
तथ्य है कि क्या आप Exception
या ApplicationException
से विरासत चाहिए के बारे में:
CA1058: Microsoft.Design:
बदलें आधार FxCop एक नियम है जो आपApplicationException
से इनहेरिट बचना चाहिए कहते है 'MyException' का प्रकार ताकि यह अब 'एप्लिकेशन अपवाद' को विस्तारित नहीं करता है। यह आधार अपवाद प्रकार फ्रेमवर्क कक्षाओं के लिए अतिरिक्त मान प्रदान नहीं करता है। 'System.Exception' या को मौजूदा अनदेखा अपवाद प्रकार बढ़ाएं। अपवादों की एक पूरी कक्षा के लिए कैच हैंडलर के निर्माण को सक्षम करने में सक्षम होने पर मान विशिष्ट मान आधार प्रकार न बनाएं।
इस नियम के बारे में the page on MSDN देखें।
आप अपना अपवाद परिभाषित कर सकते हैं।
उपयोगकर्ता परिभाषित अपवाद वर्ग ApplicationException कक्षा से प्राप्त किए गए हैं।
आप नीचे दिए गए कोड देख सकते हैं:
using System;
namespace UserDefinedException
{
class TestTemperature
{
static void Main(string[] args)
{
Temperature temp = new Temperature();
try
{
temp.showTemp();
}
catch(TempIsZeroException e)
{
Console.WriteLine("TempIsZeroException: {0}", e.Message);
}
Console.ReadKey();
}
}
}
public class TempIsZeroException: ApplicationException
{
public TempIsZeroException(string message): base(message)
{
}
}
public class Temperature
{
int temperature = 0;
public void showTemp()
{
if(temperature == 0)
{
throw (new TempIsZeroException("Zero Temperature found"));
}
else
{
Console.WriteLine("Temperature: {0}", temperature);
}
}
}
और एक अपवाद फेंकने के लिए,
आप एक वस्तु अगर यह प्रत्यक्ष या अप्रत्यक्ष रूप System.Exception वर्ग से प्राप्त होता है फेंक कर सकते हैं
Catch(Exception e)
{
...
Throw e
}
डाउनवॉटेड के रूप में इसे .NET 2.0 के बाद अपवाद (अनुप्रयोग अपवाद नहीं) को उपclass करने की अनुशंसा की गई है। यह भी इस सवाल के अन्य उत्तरों में स्पष्ट रूप से कहा गया है। – Andy
- 1. सी # में उपयोगकर्ता परिभाषित अपवाद कैसे लिखें?
- 2. मैं जावा अपवाद में कैसे संलग्न करूं?
- 3. अपने स्वयं के अपवाद वर्गों को परिभाषित करने के लिए सर्वोत्तम अभ्यास?
- 4. अपने स्वयं के पढ़ने वाले मैक्रो को परिभाषित करें
- 5. मैं अपने स्वयं के फ़ाइल एक्सटेंशन
- 6. मैं सी ++ में स्ट्रिंग स्थिरांक कैसे परिभाषित करूं?
- 7. पायथन: अपने स्वयं के ऑपरेटरों को परिभाषित करना?
- 8. अपने स्वयं के फ़ाइल
- 9. मैं अपने स्वयं के प्रोजेक्ट में बाहरी जेएआर कैसे शामिल करूं JAR
- 10. अपने स्वयं के
- 11. मैं अपने सी ++ प्रोजेक्ट में SQLite DLL कैसे शामिल करूं?
- 12. मैं फैक्टरीगर्ल के साथ नेस्टेड कारखानों को कैसे परिभाषित करूं?
- 13. मैं विम में लाइन ब्रेक के लिए अपवाद कैसे परिभाषित करूं?
- 14. मैं एक SWIG wrapper लाइब्रेरी में पायथन के लिए C++ अपवाद कैसे प्रसारित करूं?
- 15. अपने स्वयं के कंटेनर वर्ग
- 16. आईओ प्रोग्रामिंग भाषा में मैं अपने ऑपरेटरों को कैसे परिभाषित करूं?
- 17. Ember.js - अपने स्वयं के मॉडल
- 18. ग्रहण अपने स्वयं के निर्माण आदेश जोड़ने
- 19. मैं अजगर में फ़ंक्शंस को फिर से परिभाषित कैसे करूं?
- 20. मैं हास्केल में लिस्प के आवेदन को कैसे परिभाषित करूं?
- 21. copy.deepcopy स्वयं परिभाषित __new __() विधि
- 22. हास्केल में अपने स्वयं के मोनड में आईओ कैसे जोड़ें?
- 23. अपवाद कैसे प्राप्त करें सी # में अपना संदेश परिभाषित करें?
- 24. मैं उपयोगकर्ता परिभाषित प्रकार के कैरे को कैसे क्रमबद्ध करूं?
- 25. मैं हास्केल में पढ़ने के अपवाद कैसे प्राप्त करूं?
- 26. मैं पर्ल फ़ंक्शंस में निर्मित कैसे परिभाषित करूं?
- 27. मैं अपने सी कोड से सी # डीएल में विधियों को कैसे कॉल करूं?
- 28. मैं जीडीबी में # परिभाषित स्थिरांक कैसे मुद्रित करूं?
- 29. मैं अपने सी # परियोजनाओं
- 30. मैं अपने अंकों में एक int कैसे विभाजित करूं?
कुडोस (लेकिन कोई +1 नहीं) जितना संभव हो उतना शब्दों के साथ एक समझदार प्रश्न पूछने के लिए। –
मैं नीचे दिए गए सभी उत्तरों से सहमत हूं, लेकिन यह टिप्पणी करना चाहूंगा कि आपको हमेशा सिस्टम से आवेदन करना चाहिए। आवेदन अपवाद। इसके लिए एमएस दिशानिर्देश सिस्टम अपवादों और उपयोगकर्ता द्वारा परिभाषित अपवादों के बीच तुरंत अंतर करना है। जो भी आप चुनते हैं, अपना बेसक्लास लिखें और अपवाद का उपयोग सुसंगत रखें। –
@ जोएल - आप जो कहते हैं उसकी सावधानी बरतें। माइक्रोसॉफ्ट बेस्ट प्रैक्टिस दस्तावेज़ कस्टम अपवादों के संबंध में खुद का विरोधाभास करता है। मैंने अपना जवाब बदल दिया क्योंकि ओपी का उपयोग अनुप्रयोग अपवाद की दिशा में अधिक स्पष्ट लगता है। विरोधाभासों के बारे में इस पोस्ट को देखें: http://weblogs.asp.net/erobillard/archive/2004/05/10/129134.aspx –