La ragione per cui le persone diffidano nell'usare la riflessione inutilmente non è la performance: sì, c'è un sovraccarico nell'uso della riflessione, ma spesso, risolvendo il problema senza di essa, richiede un approccio diverso con complessità paragonabile, e anche se non lo fosse, il sovraccarico è raramente significativo (specialmente per lo sviluppo a livello di applicazione).
Usando il reflection, alcune importanti assunzioni che si possono fare sul codice sorgente sono interrotte e strumenti come "Find All References" smettono di funzionare in modo affidabile. Reflection rimuove anche la maggior parte del tipo di sicurezza che il compilatore impone, per esempio, C #, e la maggior parte degli errori di programmazione che un sistema di tipi normalmente cattura e traduce in errori del compilatore, ora diventano errori di runtime nei bachi migliori o molto oscuri nel peggiore dei casi.
Quindi perché la gente usa la riflessione allora? In poche parole, perché nonostante i problemi descritti sopra, è uno strumento molto prezioso. Con la riflessione, alcuni dei vantaggi della programmazione dinamica si possono avere in un linguaggio statico e tipizzato come C #, e i linguaggi di programmazione dinamici hanno mostrato i loro meriti di recente, specialmente nel campo della programmazione web - PHP, Javascript e abbastanza prominente Python , tutti usano la digitazione dinamica e si sono dimostrati validi per la programmazione web. Ma dal momento che il linguaggio è ancora C #, puoi scegliere di mantenere la maggior parte della tua applicazione in un linguaggio OOP rigorosamente tipizzato e scrivere la parte piccola in cui il comportamento dinamico fa davvero la differenza con la riflessione.
Un esempio tipico è quando è necessario esporre i metodi come chiamate al servizio web (utilizzando un protocollo non ancora incorporato in .NET). L'approccio OOP rigorosamente tipizzato funziona, ma è eccessivamente restrittivo e maldestro. Ma se usi la reflection per mappare le chiamate ai metodi e le coppie chiave / valore agli argomenti, puoi scrivere l'impianto idraulico per un tale servizio web una volta e poi usarlo su qualsiasi classe che ti piace.