लोगों द्वारा अनावश्यक रूप से प्रतिबिंब का उपयोग करने से सावधान रहने का कारण यह प्रदर्शन नहीं है: हाँ, प्रतिबिंब का उपयोग करने के लिए कुछ ओवरहेड है, लेकिन अक्सर, समस्या को हल करने के बिना तुलनीय जटिलता के साथ एक अलग दृष्टिकोण की आवश्यकता होती है, और भले ही यह नहीं हो, ओवरहेड है शायद ही कभी महत्वपूर्ण (विशेष रूप से अनुप्रयोग-स्तरीय विकास के लिए)।
प्रतिबिंब का उपयोग करते हुए, कुछ महत्वपूर्ण धारणाएं जो आमतौर पर स्रोत कोड के बारे में बताई जाती हैं, और उपकरण जैसे "फाइंड ऑल रेफरेंस" को मज़बूती से काम करने के लिए रोकते हैं। परावर्तन भी मूल रूप से संकलक को टाइप करने वाली अधिकांश सुरक्षा को हटा देता है, कहते हैं, C #, और अधिकांश प्रोग्रामिंग त्रुटियां जो एक प्रकार की प्रणाली सामान्य रूप से संकलक त्रुटियों में पकड़ती है और अनुवाद करती है, अब सबसे अच्छे या बहुत ही अस्पष्ट बग पर रनटाइम त्रुटियां बन जाती हैं।
तो लोग प्रतिबिंब का उपयोग क्यों करते हैं? सीधे शब्दों में कहें, क्योंकि ऊपर वर्णित समस्याओं के बावजूद, यह एक बहुत ही मूल्यवान उपकरण है। परावर्तन के साथ, गतिशील प्रोग्रामिंग के कुछ लाभों में सी # जैसी स्थिर, सख्ती से टाइप की जाने वाली भाषा हो सकती है, और गतिशील प्रोग्रामिंग भाषाओं ने हाल ही में, विशेष रूप से वेब प्रोग्रामिंग के दायरे में - PHP, जावास्क्रिप्ट, और काफी प्रमुख पायथन को दिखाया है। , सभी डायनामिक टाइपिंग का उपयोग करते हैं, और वेब प्रोग्रामिंग के लिए अच्छे साबित होते हैं। लेकिन चूंकि भाषा अभी भी C # है, आप अपने अधिकांश एप्लिकेशन को कड़ाई से टाइप किए गए OOP मुहावरे में रखने का विकल्प चुन सकते हैं, और उस छोटे हिस्से को लिख सकते हैं जहां गतिशील व्यवहार वास्तव में प्रतिबिंब के साथ अंतर करता है।
एक विशिष्ट उदाहरण है जब आपको वेब सेवा कॉल के रूप में विधियों को उजागर करने की आवश्यकता होती है (अभी तक .NET में निर्मित प्रोटोकॉल का उपयोग नहीं किया गया है)। कड़ाई से टाइप किया गया OOP दृष्टिकोण काम करता है, लेकिन यह अत्यधिक प्रतिबंधात्मक और अनाड़ी है। लेकिन अगर आप तर्कों के लिए मेप कॉल टू मेथड्स और की / वैल्यू पेयर का उपयोग करते हैं, तो आप एक बार ऐसी वेब सेवा के लिए प्लंबिंग लिख सकते हैं और फिर अपनी पसंद के किसी भी वर्ग पर इसका उपयोग कर सकते हैं।