2010-03-14 14 views
8

कक्षा नाम: MyAssembly.MyClass+MyOtherClassकक्षा के नाम में "+" होने के बाद?

समस्या traditionnal डॉट, अपने कार्य के बजाय, + विभाजक के रूप में स्पष्ट रूप से है, और अगर दूसरों विभाजक मौजूद देखने के लिए आधिकारिक दस्तावेज खोजने के लिए।

+0

आपको यह जानने की आवश्यकता क्यों है? आप इस ज्ञान के साथ पूरा करने की क्या कोशिश कर रहे हैं? –

उत्तर

13

अभी जिस तरह कि एक नेस्टेड प्रकार का प्रतिनिधित्व किया है कि के रूप में

class A+B 

देखा की जाएगी। उदाहरण के लिए:

namespace Foo 
{ 
    class Outer 
    { 
     class Nested {} 
    } 
} 

संकलित कोड में Foo.Outer+Nested के पूरे नाम के साथ एक प्रकार का निर्माण करेगा। (ताकि क्या typeof(Outer.Nested).FullName वापसी होगी, उदाहरण के लिए है।)

यह है कि क्या यह निर्दिष्ट व्यवहार है, या बस क्या माइक्रोसॉफ्ट सी # संकलक का उपयोग करने के लिए चुनता मेरे लिए स्पष्ट नहीं है; यह एक "अनपेक्षित" नाम है जिसमें आप सामान्य सी # में एक + के साथ स्पष्ट रूप से एक कक्षा घोषित नहीं कर सकते हैं, इसलिए संकलक जानता है कि यह किसी और चीज़ से संघर्ष नहीं करेगा। सी # 3 spec की धारा 10.3.8 संकलित नाम को तब तक निर्देशित नहीं करती है जब तक मैं देख सकता हूं।

संपादित करें: मैं बस देखा है Type.AssemblyQualifiedName निर्दिष्ट करता है कि कि "+" एक नेस्टेड प्रकार का नाम पूर्व में होना करने के लिए प्रयोग किया जाता है ... लेकिन यह अभी भी स्पष्ट किया जाए या नहीं है कि वास्तव में आवश्यक या सिर्फ पारंपरिक है नहीं है।

+2

एक और तरीका यह कार्यान्वयन विस्तार स्वयं प्रकट होता है, नेस्टेड जेनेरिक प्रकारों में है। यदि आपके पास क्लास ऑउटर है, नेस्टेड क्लास इनर के साथ आप देखेंगे कि वास्तव में मेटाडेटा में आपको जो मिलता है वह दो प्रकार हैं, बाहरी <'1> और बाहरी + इनर <'2>। नेस्टेड प्रकार सीएलआर परिप्रेक्ष्य से वास्तव में भाषा द्वारा बताए गए एक सुविधाजनक फाइब हैं। घोंसले को "वास्तविक के लिए" बाहरी प्रकार के बाहरी सदस्यों तक पहुंचने के लिए आंतरिक प्रकार की क्षमता में बहुत अधिक दिखाई देता है। (नेमस्पेस समान रूप से एक कथा है।) –

+0

यदि नेस्टेड क्लास का नाम बस माइक्रोसॉफ्ट के सी # कंपाइलर द्वारा चुना गया था तो अन्य कंपाइलरों के साथ अंतःक्रियाशीलता कैसे संभव होगी? क्या इसका मतलब यह है कि अगर कोई नेस्टेड कक्षाओं का उपयोग नहीं कर सकता है तो उदा। मोनो कंपाइलर का उपयोग कर? –

+0

divo: मुझे लगता है कि मोनो का सी # कंपाइलर माइक्रोसॉफ्ट के समान योजना का पालन करता है। इसी तरह कहीं और जहां सी # spec में कुछ निर्दिष्ट नहीं छोड़ा गया है। –

10

यह है कि संकलक एक नेस्टेड कक्षा का प्रतिनिधित्व करने के लिए मेटाडेटा में उपयोग करता है।

अर्थात

class A { class B {} } 

मेटाडाटा

+1

धन्यवाद। यह एकमात्र ऐसा संकेत है जिसे हम इस तरह से पा सकते हैं? – Graveen

+0

मैं सिर्फ आईएलडीएएसएम में .NET (1.1) लाइब्रेरी को देख रहा था और वहां नेस्टेड प्रकारों को विभाजक के रूप में '/' दिखाया गया था। –

+0

तो आईएलडीएएसएम झूठ बोल रहा है। –

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