C# में रिफ्लेक्शन और इंट्रोस्पेक्शन: अपने कोड के अंदर कैसे झाँकें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: प्रतिबिंब का जादू

\n

कल्पना करें कि आप ऐसा कोड लिख रहे हैं जो स्वयं को "देख" सकता है। टेढ़े दर्पण की तरह नहीं, बल्कि एक्स-रे मशीन की तरह — संरचना, गुण, विधियाँ देख सकता है, और संकलन के समय वर्ग का नाम जाने बिना भी उन्हें चला सकता है। यह जादू नहीं है, यह C# में रिफ्लेक्शन (प्रतिबिंब) और इसकी "छोटी बहन" — C# इंट्रोस्पेक्शन है।

\n\n

इसकी आवश्यकता क्यों है? कल्पना करें कि आप एक प्लगइन सिस्टम, JSON डिसीरियलाइज़र, या डायनामिक विधि कॉल लिख रहे हैं। रिफ्लेक्शन के बिना आपको ढेर सारे if-else लिखने पड़ते। लेकिन इसके साथ — बस कुछ पंक्तियाँ पर्याप्त हैं। दिलचस्प लगता है? चलिए समझते हैं।

\n\n

इस लेख में हम केवल सिद्धांत पर नहीं चलेंगे। हम वास्तविक कोड उदाहरण लिखेंगे जिन्हें आप तुरंत अपने प्रोजेक्ट में उपयोग कर सकते हैं। आप सीखेंगे कि किसी भी प्रकार के बारे में जानकारी कैसे प्राप्त करें, "हवा से" ऑब्जेक्ट कैसे बनाएं, प्राइवेट विधि को कैसे कॉल करें और एट्रीब्यूट कैसे पढ़ें। और यह सब — C# भाषा में, जो अपनी सख्ती और शक्ति के लिए पसंद की जाती है।

\n\n

C# में रिफ्लेक्शन और इंट्रोस्पेक्शन क्या है? अवधारणाओं में अंतर

\n

अक्सर इन शब्दों को पर्यायवाची के रूप में उपयोग किया जाता है, लेकिन इनमें एक सूक्ष्म अंतर है:

\n
    \n
  • C# इंट्रोस्पेक्शन — यह प्रोग्राम की अपनी संरचना का अवलोकन करने की क्षमता है। आप जान सकते हैं कि किसी वर्ग में कौन से फ़ील्ड हैं, इसमें कौन सी विधियाँ हैं, कौन से एट्रीब्यूट लगे हैं। लेकिन आप कुछ भी नहीं बदलते।
  • \n
  • C# रिफ्लेक्शन — यह एक व्यापक अवधारणा है। इसमें इंट्रोस्पेक्शन शामिल है, साथ ही कोड के साथ बातचीत करने की क्षमता: विधियों को कॉल करना, ऑब्जेक्ट बनाना, फ़ील्ड के मान बदलना।
  • \n
\n

सीधे शब्दों में: इंट्रोस्पेक्शन "देखना" है, रिफ्लेक्शन "देखना और छूना" है। C# में दोनों कार्यों के लिए नेमस्पेस System.Reflection जिम्मेदार है। यह आपका मुख्य उपकरण है।

\n\n

व्यावहारिक उदाहरण: प्रकार (Type) के बारे में जानकारी प्राप्त करना

\n

सब कुछ Type वर्ग से शुरू होता है। यह रिफ्लेक्शन की नींव है। इसे तीन तरीकों से प्राप्त किया जा सकता है:

\n
// तरीका 1: typeof() के माध्यम से\nType typeFromKeyword = typeof(string);\n\n// तरीका 2: इंस्टेंस .GetType() के माध्यम से\nstring example = "नमस्ते, दुनिया!";\nType typeFromInstance = example.GetType();\n\n// तरीका 3: असेंबली (Assembly) के माध्यम से\nType typeFromAssembly = Assembly.GetExecutingAssembly().GetType("System.String");
\n\n

अब, Type ऑब्जेक्ट होने पर, हम वर्ग के बारे में सब कुछ जान सकते हैं। आइए इंट्रोस्पेक्शन के लिए एक उपयोगी विधि लिखें:

\n\n
using System;\nusing System.Reflection;\n\npublic class Inspector\n{\n    public static void ShowTypeInfo(Type type)\n    {\n        Console.WriteLine($"=== प्रकार के बारे में जानकारी: {type.Name} ===");\n        Console.WriteLine($"पूरा नाम: {type.FullName}");\n        Console.WriteLine($"क्या यह वर्ग है? {type.IsClass}");\n        Console.WriteLine($"क्या यह अमूर्त है? {type.IsAbstract}");\n        Console.WriteLine($"आधार वर्ग: {type.BaseType?.Name}");\n        \n        Console.WriteLine("\\nसार्वजनिक गुण:");\n        foreach (PropertyInfo prop in type.GetProperties())\n        {\n            Console.WriteLine($" - {prop.PropertyType.Name} {prop.Name}");\n        }\n        \n        Console.WriteLine("\\nसार्वजनिक विधियाँ:");\n        foreach (MethodInfo method in type.GetMethods())\n        {\n            Console.WriteLine($" - {method.ReturnType.Name} {method.Name}({string.Join(", ", method.GetParameters().Select(p => $"{p.ParameterType.Name} {p.Name}"))})");\n        }\n    }\n}\n\n// उपयोग\nInspector.ShowTypeInfo(typeof(List<int>));\n/* आउटपुट:\n=== प्रकार के बारे में जानकारी: List`1 ===\nपूरा नाम: System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]\nक्या यह वर्ग है? True\nक्या यह अमूर्त है? False\nआधार वर्ग: Object\n\nसार्वजनिक गुण:\n - Int32 Capacity\n - Int32 Count\n\nसार्वजनिक विधियाँ:\n - Void Add(Int32 obj)\n - Void Clear()\n - Boolean Contains(Int32 item)\n ... और कई अन्य\n*/
\n\n

यह शुद्ध इंट्रोस्पेक्शन है।

ब्लॉग

पुस्तक अनुशंसाएँ