C# रिफ्लेक्शन: प्रॉपर्टी का नाम से मान कैसे पाएं - पूरी गाइड

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

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

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

C# रिफ्लेक्शन: प्रॉपर्टी का नाम से मान कैसे पाएं - शुरुआती लोगों के लिए गाइड

\n\n

कल्पना कीजिए: आप कोड लिख रहे हैं जहां आपको डायनामिक रूप से, तुरंत, किसी ऑब्जेक्ट की प्रॉपर्टी तक पहुंचना है। इस प्रॉपर्टी का नाम, उदाहरण के लिए, कॉन्फ़िगरेशन फ़ाइल, JSON रिक्वेस्ट से आता है, या उपयोगकर्ता द्वारा दर्ज किया जाता है। object.PropertyName को हार्डकोड नहीं किया जा सकता - आप पहले से नाम नहीं जानते। तो क्या करें?

\n\n

यहां रिफ्लेक्शन (reflection) काम आता है - C# का एक शक्तिशाली तंत्र जो आपको प्रोग्राम के निष्पादन के दौरान डेटा प्रकारों और उनके सदस्यों (प्रॉपर्टी, मेथड, फील्ड) की जांच करने की अनुमति देता है। इस लेख में, हम Stack Overflow पर सबसे लोकप्रिय प्रश्न को हल करेंगे: किसी ऑब्जेक्ट की प्रॉपर्टी का मान उसके नाम वाली स्ट्रिंग से कैसे प्राप्त करें। हम वास्तविक उदाहरणों के साथ, सरल से जटिल तक, और शुरुआती लोगों द्वारा की जाने वाली सामान्य गलतियों पर भी चर्चा करेंगे।

\n\n

रिफ्लेक्शन क्या है और इसकी आवश्यकता क्यों है?

\n\n

C# में रिफ्लेक्शन, प्रोग्राम की अपने स्वयं के प्रकारों के बारे में जानकारी प्राप्त करने की क्षमता है। System.Reflection नेमस्पेस Type, PropertyInfo, MethodInfo जैसी क्लासेज प्रदान करता है, जो आपको निम्न की अनुमति देता है:

\n\n
    \n
  • क्लास के सभी प्रॉपर्टी और मेथड के बारे में जानना।
  • \n
  • new ऑपरेटर के बिना क्लास के इंस्टेंस बनाना।
  • \n
  • मेथड को कॉल करना और प्रॉपर्टी के मानों को उनके स्ट्रिंग नामों से प्राप्त/सेट करना।
  • \n
\n\n

रिफ्लेक्शन के बिना, आप एक यूनिवर्सल ऑब्जेक्ट मैपर (जैसे AutoMapper) या सीरियलाइज़र नहीं लिख सकते थे जो किसी भी डेटा प्रकार के साथ काम करते हैं।

\n\n

बेसिक उदाहरण: प्रॉपर्टी का नाम से मान प्राप्त करना

\n\n

मान लीजिए, हमारे पास एक सरल Person क्लास है:

\n\n
public class Person\n{\n    public string Name { get; set; }\n    public int Age { get; set; }\n    public string City { get; set; }\n}
\n\n

हम एक मेथड लिखना चाहते हैं जो Person ऑब्जेक्ट और प्रॉपर्टी के नाम वाली स्ट्रिंग (जैसे, "Name" या "Age") लेता है और उस प्रॉपर्टी का मान लौटाता है। रिफ्लेक्शन का उपयोग करके इसे इस प्रकार किया जाता है:

\n\n
using System;\nusing System.Reflection;\n\npublic static object GetPropertyValue(object obj, string propertyName)\n{\n    if (obj == null) throw new ArgumentNullException(nameof(obj));\n    if (string.IsNullOrEmpty(propertyName)) throw new ArgumentException("प्रॉपर्टी का नाम खाली नहीं हो सकता", nameof(propertyName));\n\n    // ऑब्जेक्ट का प्रकार प्राप्त करें\n    Type type = obj.GetType();\n\n    // प्रॉपर्टी के नाम से उसकी जानकारी प्राप्त करें\n    PropertyInfo propertyInfo = type.GetProperty(propertyName);\n\n    // जांचें कि क्या ऐसी प्रॉपर्टी मौजूद है\n    if (propertyInfo == null)\n        throw new ArgumentException($"प्रॉपर्टी '{propertyName}' टाइप '{type.Name}' में नहीं मिली");\n\n    // प्रॉपर्टी का मान प्राप्त करें\n    return propertyInfo.GetValue(obj);\n}
\n\n

अब हम अपने मेथड का उपयोग करते हैं:

\n\n
var person = new Person { Name = "अन्ना", Age = 30, City = "मॉस्को" };\n\nstring name = (string)GetPropertyValue(person, "Name");\nint age = (int)GetPropertyValue(person, "Age");\n\nConsole.WriteLine($"नाम: {name}, उम्र: {age}"); // आउटपुट: नाम: अन्ना, उम्र: 30
\n\n

सब कुछ काम करता है! मुख्य बिंदु:

\n
    \n
  • obj.GetType() - हमारे ऑब्जेक्ट के प्रकार का वर्णन करने वाला Type ऑब्जेक्ट प्राप्त करता है।
  • \n
  • type.GetProperty("Name") - "Name" नाम की पब्लिक प्रॉपर्टी खोजता है। यह PropertyInfo लौटाता है या null यदि प्रॉपर्टी नहीं मिलती है।
  • \n
  • propertyInfo.GetValue(obj) - विशिष्ट इंस्टेंस obj के लिए इस प्रॉपर्टी का मान लौटाता है।
  • \n
\n\n

महत्वपूर्ण बारीकियां और सामान्य गलतियां (जो जूनियर डेवलपर्स अक्सर करते हैं)

\n\n

1. केस-सेंसिटिविटी (केस संवेदनशीलता)

\n

GetProperty मेथड डिफ़ॉल्ट रूप से केस-सेंसिटिव है। यदि आप "Name" के बजाय "name" निर्दिष्ट करते हैं, तो प्रॉपर्टी नहीं मिलेगी।

ब्लॉग

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