2013-04-09 26 views
11

मुझे लगता है मैं क्या मतलब ऑपरेटर/प्रतीक <> कुछ कार्यों से पहले नहीं जानता कि विघटितएमएसआईएल में प्रतीक <> का मतलब क्या है?

SampleClass sampleClass; 
    SampleClass <>g__initLocal0; 
    int y; 
    sampleClass = null; 
Label_0018: 
    try 
    { 
     <>g__initLocal0 = new SampleClass(); 
     <>g__initLocal0.X = 5; 
     <>g__initLocal0.Y = 10; 
     sampleClass = <>g__initLocal0; 
     goto Label_003A; 
    } 
    catch (Exception) 
    { 
    Label_0035: 
     goto Label_003A; 
    } 
Label_003A: 
    y = sampleClass.Y; 

के बाद इस कोड है। क्या कोई जानता है?

उत्तर

13

यह एक कंपाइलर उत्पन्न नाम है - <> अक्षर आईएल में पहचानकर्ताओं के लिए कानूनी हैं, लेकिन सी # में नहीं। इसलिए, संकलक जानता है कि यह ऐसे वर्णों वाले नाम उत्पन्न कर सकता है, बिना किसी मौके के कि नाम आपके नाम में आपके द्वारा उपयोग किए गए नाम से संघर्ष करेगा।

इस विशेष मामले में, <>g__initLocal0 एक नया चर है जिसे एक कक्षा का एक नया निर्मित उदाहरण आयोजित करने के लिए पेश किया गया है जिसे initializer syntax का उपयोग करके प्रारंभ किया जा रहा है। मूल कोड था:

sampleClass = new SampleClass() { X = 5, Y = 10}; 

यह sampleClass से बचने के लिए शुरू की है आंशिक रूप से निर्माण किया उदाहरण के साथ मनाया जा रहा है - के बाद new SampleClass() मार डाला गया है, लेकिन इससे पहले कि X और Y के कार्य होते हैं। अर्थात। यदि Y = 10 अपवाद फेंकता है, तो यह सुनिश्चित करता है कि sampleClassnull बनी हुई है और SampleClassX के साथ 5 औरके लिए कुछ अज्ञात मान नहीं है।

+1

इन नामों के निर्माण के बारे में जानकारी के लिए, [एरिक लिपर्ट से यह जवाब] देखें (http://stackoverflow.com/a/2509524/41071)। – svick

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