Der Grund, warum die Leute nicht unnötig auf Reflexion achten, ist nicht die Leistung: Ja, die Verwendung von Reflexion ist mit einem gewissen Aufwand verbunden, aber häufig erfordert die Lösung des Problems ohne Reflexion einen anderen Ansatz mit vergleichbarer Komplexität, und selbst wenn dies nicht der Fall ist, ist dies der Aufwand selten von Bedeutung (insbesondere für die Entwicklung auf Anwendungsebene).
Bei der Verwendung von Reflection sind einige wichtige Annahmen, die man normalerweise zum Quellcode machen kann, fehlerhaft, und Tools wie "Alle Verweise suchen" funktionieren nicht mehr zuverlässig. Reflection beseitigt im Grunde genommen auch den größten Teil der Typensicherheit, die der Compiler beispielsweise in C # erzwingt, und die meisten Programmierfehler, die ein Typensystem normalerweise abfängt und in Compilerfehler umsetzt, werden im besten Fall zu Laufzeitfehlern oder im schlimmsten Fall zu sehr undurchsichtigen Fehlern.
Warum verwenden die Leute dann Reflexion? Einfach ausgedrückt, weil es trotz der oben beschriebenen Probleme ein sehr wertvolles Werkzeug ist. Mit Reflektion können einige der Vorteile der dynamischen Programmierung in einer statischen, streng typisierten Sprache wie C # erzielt werden, und dynamische Programmiersprachen haben in letzter Zeit ihre Vorzüge gezeigt, insbesondere im Bereich der Webprogrammierung - PHP, Javascript und ganz prominent Python verwenden alle dynamische Typisierung und haben sich als gut für die Webprogrammierung erwiesen. Da die Sprache jedoch immer noch C # ist, können Sie den größten Teil Ihrer Anwendung in einer streng typisierten OOP-Sprache speichern und den kleinen Teil schreiben, in dem dynamisches Verhalten bei der Reflexion wirklich einen Unterschied macht.
Ein typisches Beispiel ist, wenn Sie Methoden als Webdienstaufrufe verfügbar machen müssen (unter Verwendung eines Protokolls, das noch nicht in .NET integriert ist). Der streng typisierte OOP-Ansatz funktioniert zwar, ist jedoch zu restriktiv und umständlich. Wenn Sie jedoch Reflection verwenden, um Aufrufe von Methoden und Schlüssel / Wert-Paare Argumenten zuzuordnen, können Sie das Installationsprogramm für einen solchen Webdienst einmal schreiben und es dann für eine beliebige Klasse verwenden.