c# - .NET(प्रतिबिंब) में यह प्रकार क्या है




reflection (2)

.NET में यह प्रकार क्या है? मैं सभी वर्गों की सूची प्राप्त करने के लिए प्रतिबिंब का उपयोग कर रहा हूं और यह एक बदल जाता है।

यह क्या है? यह कहां से आता है? DisplayClass1 नाम का नाम कैसा है? मैं स्रोतों की खोज करता हूं और कुछ भी नहीं देखता। <> मतलब क्या है? c__ मतलब क्या है? क्या संदर्भ है?


जॉन बिल्कुल सही है। मैंने यह पता लगाने के लिए एक "डिकोडर रिंग" प्रदान किया है कि विभिन्न कंपाइलर-जेनरेट प्रकार के नाम यहां क्या हैं:

वीएस डीबगर 'जादू नाम' के बारे में कहां से सीखना है

नाम काफी लंबे हैं और हमें कभी-कभी शिकायतें मिलती हैं कि हम परिणामस्वरूप मेटाडेटा के आकार को बढ़ा रहे हैं। भविष्य में किसी भी समय इस चिंता को हल करने के लिए हम नाम जनरेशन नियमों को बदल सकते हैं। इसलिए यह बहुत महत्वपूर्ण है कि आप कोड नहीं लिखते जो इस कंपाइलर कार्यान्वयन के विवरण के ज्ञान का लाभ उठाता है।


लैम्ब्डा अभिव्यक्ति या अज्ञात विधि के कारण यह लगभग निश्चित रूप से संकलक द्वारा उत्पन्न एक वर्ग है। उदाहरण के लिए, इस कोड पर विचार करें:

using System;

class Test
{
    static void Main()
    {
        int x = 10;
        Func<int, int> foo = y => y + x;
        Console.WriteLine(foo(x));
    }
}

यह संकलित हो जाता है:

using System;

class Test
{
    static void Main()
    {
        ExtraClass extra = new ExtraClass();
        extra.x = 10;

        Func<int, int> foo = extra.DelegateMethod;
        Console.WriteLine(foo(x));
    }

    private class ExtraClass
    {
        public int x;

        public int DelegateMethod(int y)
        {
            return y + x;
        }
    }
}

... <>c_displayClass1 बजाय नाम के रूप में <>c_displayClass1 का उपयोग करने के ExtraClass । यह एक अनजान नाम है कि यह वैध सी # नहीं है - जिसका अर्थ है कि सी # कंपाइलर यह सुनिश्चित करने के लिए जानता है कि यह आपके कोड में दिखाई नहीं देगा और इसकी पसंद के साथ संघर्ष करेगा।

अज्ञात कार्यों को संकलित करने का सटीक तरीका निश्चित रूप से कार्यान्वयन-विशिष्ट है - जैसा कि अतिरिक्त कक्षा के लिए नाम की पसंद है।

कंपाइलर इटरेटर ब्लॉक के लिए अतिरिक्त कक्षाएं उत्पन्न करता है और (सी # 5 में) async विधियों और प्रतिनिधियों को भी बनाता है।







reflection