प्रतिबिंब आपको संकलन समय पर संकलक द्वारा उपयोग की जाने वाली वही जानकारी रनटाइम पर जांचने देता है। नतीजतन, प्रतिबिंब के साथ आप जो कुछ भी कर सकते हैं संकलन के दौरान प्रतिबिंब के बिना किया जा सकता है। इसका मतलब यह नहीं है कि प्रतिबिंब का कोई उपयोग नहीं है: आपको पता नहीं हो सकता कि आप रनटाइम तक क्या सटीक प्रश्न पूछना चाहते हैं।
यदि आप संकलन समय पर कुछ जानते हैं, तो इसे टाइप सिस्टम में व्यक्त करें। यह आपको संकलन समय पर गलतियों को पकड़ने की अनुमति देगा। उदाहरण के लिए,
string propVal = myObj.SomeProperty;
यहाँ हम कह रहे हैं कि हम संकलन समय पर निश्चित रूप से पता है कि myObj
एक संपत्ति SomeProperty
कहा जाता है एक प्रकार है कि string
को आबंटित है की है कि है - और वास्तव में, हालांकि यह दिखाई नहीं देता है यहां, हमें myObj
का एक वर्ग या इंटरफ़ेस प्रकार भी निर्दिष्ट करना होगा।
string propVal = (string)myObj.GetType()
.GetProperty("SomeProperty")
.GetValue(myObj, null);
यहाँ हम कह रहे हैं कि myObj
जो एक ही संपत्ति हो सकता है - या यह नहीं (इस स्थिति में हम कार्यावधि में एक अपवाद मिल जाएगा) हो सकता है।
प्रतिबिंब का उपयोग करते हुए दूसरा, बट-बदसूरत दिखता है, लेकिन सी # 4.0 में यह व्यावहारिक रूप से समान दिखाई देगा। इसे अक्सर धीमा होने के लिए भी आयोजित किया जाता है, लेकिन यह संदर्भ पर निर्भर करता है, और शायद सी # 4.0 में गतिशील विशेषताओं के बारे में कम सच होगा।
असली भेद बनी हुई है, हालांकि: स्थिर रूप से टाइप किए गए संस्करण को संकलन के दौरान गलतियों को खोजने में मदद करता है, बजाय रनटाइम तक इस खोज में देरी की बजाय।
तो यदि आप संकलन के दौरान बग को पकड़ने के लिए स्थिर प्रकार प्रणाली का पूरा उपयोग करना चाहते हैं, तो टाइप सिस्टम के माध्यम से अपनी धारणाओं को बताने का प्रयास करें, जो कहने के बराबर है: वास्तव में जहां आवश्यक हो वहां प्रतिबिंब से बचें।
स्रोत
2009-07-30 19:09:57
मुझे बहुत सारी राय दिखाई देती हैं लेकिन सर्वोत्तम प्रथाओं के बारे में कोई चर्चा नहीं है। –
हम प्रिंट में अपना नाम देखना पसंद करते हैं। देख? -> –
आप में से कई ने इंगित किया है कि प्रतिबिंब ढांचे, परीक्षण, मैक्स इत्यादि में एक जगह है। व्यापार के अनुप्रयोगों के बारे में कैसे? – Mank