2012-02-02 14 views
7

मैंने घोंसला वाले वर्गों के साथ गड़बड़ करते हुए और कंसोल विंडो में प्रकार के नाम को आउटपुट करते समय कुछ उत्सुकता देखी। मैं सोच रहा था कि कोई मेरे लिए थोड़ा सा समझा सकता है। मुख्य कक्षा पर GetType() पर कॉल करते समय, यह वही देता है जो मैं अपेक्षा करता हूं, जो प्रासंगिक नामस्थानों के बाद कक्षा का नाम था।नेस्टेड क्लास .GetType()

Namespace.Namespace.ClassNameEnclosing + ClassNameNested. 

क्यों यह बस डॉट नोटेशन रूप में वापस आ नहीं है: यानी Namespace.Namespace.Classname

हालांकि, जब मैं संलग्नित क्लास के भीतर से एक समारोह फोन नेस्टेड वर्ग के प्रकार के वापस जाने के लिए मैं मूल्य इस रूप में लौट आए हो । क्यों + प्रतीक? मैं इस उत्सुकता के कारण पृष्ठभूमि में क्या हो रहा है, इस बारे में सिर्फ उत्सुक हूं।

उत्तर

5

डॉट्स का उपयोग नामस्थानों को दर्शाने के लिए किया जाता है। नेस्टेड क्लास अभी भी एक ही नामस्थान में है, यह सिर्फ कक्षा के भीतर घोंसला है।

मैं ऑफहैंड (ईसीएमए -335 के संक्षिप्त अध्ययन से) नहीं बता सकता हूं कि एक अयोग्य प्रकार का नाम जिसमें एक डॉट शामिल है वास्तव में आईएल में मान्य होगा; I संदिग्ध यह होगा, लेकिन यह सभी प्रकार के निदान को पढ़ने के लिए कठिन बना देगा।

+0

प्रतिक्रिया के लिए धन्यवाद। मैं ऐसा देखता हूं हालांकि कक्षा अपने वर्ग में एक वर्ग है, लेकिन इसका अपना नामस्थान नहीं है? प्लस प्रतीक मूल रूप से बताता है कि यह प्रकार संलग्न वर्ग के नामस्थान के लिए एक अतिरिक्त है? – CSharpened

+0

@CSharpened: हाँ, यह उसका नामस्थान है - यदि आप (कहें) 'नामस्थान का नामस्थान देखते हैं। चयन। जेनेरिक.SortedDictionary । ValueCollection' आपको यह मिल जाएगा' System.Collections.Generic'। –

+0

उत्कृष्ट जवाब। धन्यवाद। यह बहुत स्पष्ट बनाता है। – CSharpened

1

प्रतिबिंब भाषा-विशिष्ट नहीं है।

डॉट नोटेशन (Namespace.Namespace.OuterClassName.InnerClassName) सी # के लिए विशिष्ट है। प्रतिबिंब प्रत्येक भाषा के लिए काम करना चाहिए जिसका उपयोग आप आईएल को संकलित करने के लिए कर सकते हैं। इसके अलावा, आप कैसे सुनिश्चित कर सकते हैं, प्रतिबिंबित करते समय, OuterClassNameType कक्षा के अन्य गुणों की जांच किए बिना नामस्थान का एक और हिस्सा नहीं है?

आप पूछते हैं कि यह डॉट नोटेशन के रूप में क्यों आसान नहीं है? आप यह भी पूछ सकते हैं कि "यह आयरनपीथन नोटेशन के रूप में क्यों नहीं लौटाया जाता है", या आयरनलिस्प नोटेशन, या एल # नोटेशन, या बू नोटेशन, या ...

प्रतिबिंब में उपयोग की गई नोटेशन जानें, और आप इसका उपयोग कर सकते हैं किसी भी भाषा में लिखे कोड का विश्लेषण करने के लिए।

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