Il motivo per cui le persone sono caute nell'usare inutilmente la riflessione non è la prestazione: sì, c'è qualche sovraccarico nell'usare la riflessione, ma spesso, risolvere il problema senza di esso richiede un approccio diverso con complessità comparabile, e anche se non lo è, l'overhead è raramente significativo (specialmente per lo sviluppo a livello di applicazione).
Usando la riflessione, alcune importanti ipotesi che si possono fare sul codice sorgente vengono infrante e strumenti come "Trova tutti i riferimenti" cessano di funzionare in modo affidabile. Reflection rimuove sostanzialmente anche la maggior parte della sicurezza del tipo in cui il compilatore applica, per esempio, C #, e la maggior parte degli errori di programmazione che un sistema di tipo normalmente rileva e traduce in errori del compilatore, ora diventano errori di runtime nella migliore delle ipotesi o bug molto oscuri nella peggiore.
Allora perché le persone usano la riflessione? In poche parole, perché nonostante i problemi sopra descritti, è uno strumento molto prezioso. Con la riflessione, alcuni dei vantaggi della programmazione dinamica possono essere ottenuti in un linguaggio statico e tipicamente rigoroso come C #, e i linguaggi di programmazione dinamica hanno mostrato recentemente i loro meriti, specialmente nel regno della programmazione web - PHP, Javascript e in particolare Python , tutti usano la digitazione dinamica e hanno dimostrato di essere adatti alla programmazione web. Ma poiché il linguaggio è ancora C #, puoi scegliere di mantenere la maggior parte della tua applicazione in un linguaggio OOP tipicamente tipizzato e scrivere la piccola parte in cui il comportamento dinamico fa davvero la differenza con la riflessione.
Un esempio tipico è quando è necessario esporre metodi come chiamate di servizi Web (utilizzando un protocollo non ancora incorporato in .NET). L'approccio OOP tipizzato rigorosamente funziona, ma è eccessivamente restrittivo e goffo. Ma se usi la riflessione per mappare le chiamate ai metodi e le coppie chiave / valore agli argomenti, puoi scrivere l'impianto idraulico per tale servizio Web una volta e poi utilizzarlo su qualsiasi classe ti piaccia.