ToString
overridden in Nullable<T>
है, इसलिए कॉल करने के लिए कोई मुक्केबाजी शामिल नहीं है।
GetType()
वर्चुअल विधि नहीं है, इसलिए ओवरराइड नहीं किया गया है (और नहीं किया जा सकता है), तो कॉल को कॉल करने से पहले बॉक्स को बॉक्स किया गया है ... और मुक्केबाजी एक शून्य मूल्य के एक शून्य मूल्य को देता है शून्य संदर्भ।
मुक्केबाजी के लिए कारण सी # 4 कल्पना की धारा 7.5.5 में है:
तो M
एक उदाहरण समारोह सदस्य एक संदर्भ प्रकार में घोषित है:
नोट एक सदस्य हो सकता है मुक्केबाजी। एक मूल्य foo
बनाने का कोई तरीका नहीं है, जैसे foo.GetType()
सामान्य GetType()
विधि का उपयोग करके एक शून्य मूल्य प्रकार देता है। (आप एक नईGetType()
निश्चित रूप से विधि बना सकते हैं, लेकिन यह एक पक्ष मुद्दा :)
(का फायदा नहीं है "बैंग!" तुम पागल गाड़ी चला है कि अगर है के लिए कहा प्रश्नोत्तरी मुझे हो सकता है। क्षमा याचना के लेखक का सुझाव मामला।)
स्रोत
2012-10-04 10:50:09
ठीक है .. लेकिन फिर आखिरी पंक्ति को प्रतिस्थापित क्यों करें: var boxed = (Int32) x; इसके बजाए InvalidOperationException फेंकता है? क्या वह मुक्केबाजी नहीं है और उसे एक ही अपवाद फेंकना चाहिए? – kabaros
@ कबरोस: नहीं, यह बिल्कुल मुक्केबाजी नहीं है - न तो 'Int32?' और न ही 'Int32' संदर्भ प्रकार हैं। यह सी # 4 spec के सेक्शन 6.2.3 में वर्णित एक स्पष्ट रूपांतरण है। –
ओह हाँ, ज़ाहिर है, यह सही समझ में आता है। बहुत बहुत धन्यवाद। जिस तरह से आपको पागल करने के लिए क्षमा किया जाता है, वैसे ही महान पुस्तक :) – kabaros