2010-06-20 13 views
10

मैं सोच रहा हूँ क्यों बेस कक्षा लाइब्रेरी से नेट अपवाद कक्षाएं डिफ़ॉल्ट रूप से कुछ परिवर्तनशील सदस्योंक्यों .NET अपवाद म्यूटेबल हैं?

  • मैं Source, HelpLink और Data से मूल्यों को क्यों बदल सकते हैं, लेकिन जैसे Message कुछ और नहीं बदल सकते ?
  • अपवाद फेंकने से StackTrace फिर से इसे उत्परिवर्तनीय बना देता है? मौजूदा ट्रेस में स्टैक ट्रेस जानकारी को जोड़ना बेहतर डिजाइन होगा (लेकिन अभी भी परिवर्तनीय)?
  • .NET अपवाद डिज़ाइन में क्या संभावित सुधार हो सकते हैं?

मैं सिर्फ डिजाइन विकल्पों में दिलचस्प हूँ ...

उत्तर

9

StackTrace, कम से कम मेरे लिए समझ में आता है। विचार यह है कि Exception (ऑब्जेक्ट के रूप में) को पास किया जा सकता है, विधियों से लौटाया जा सकता है। StackTrace केवल अपवाद के रूप में फेंक दिया गया है और पकड़ा गया है। एक अर्थ में, StackTraceअपवाद के फेंकने की वास्तव में अधिक संपत्ति है, Exception ऑब्जेक्ट स्वयं ही नहीं।

अन्य गुणों की व्यवहार्यता के संबंध में, मुझे लगता है कि यह केवल इसलिए है क्योंकि गुणकों को सभी को कन्स्ट्रक्टर में मजबूर करने के बजाय गुणों को असाइन करके एक उदाहरण बनाना आसान है। याद रखें कि उस समय Exception डिज़ाइन किया गया था, सी # में वैकल्पिक पैरामीटर नहीं थे।

आप एक पुन: डिज़ाइन पर विचार कर सकते हैं जहां Exception और व्युत्पन्न कक्षाएं अपरिवर्तनीय हैं, लेकिन इसके लिए अपवाद कारखाने या निर्माता वर्ग की आवश्यकता होगी। यह सिर्फ Exception से प्राप्त करना होगा जो कि अधिक जटिल है।

+0

ठीक है, अगर समस्या अपवाद में बहुत अधिक डेटा गुजर रही है, तो 'संदेश' संपत्ति क्यों पढ़ी जाती है? – ControlFlow

+0

'स्टैकट्रेस' के बारे में अच्छे विचार ... – ControlFlow

+0

'संदेश' जानकारी का एक गैर-वैकल्पिक टुकड़ा है, इसलिए इसे कन्स्ट्रक्टर में रखना समझ में आता है। –

संबंधित मुद्दे