Wollte im anderen Thread (Link) nicht offtopic-Fragen stellen, darum ein Extra Thread
Codebeispiele kennt ihr sicher zur Genüge,
ich bemerkte dass aber erst vor kurzem ..
Warum wird sowas aber in C# erlaubt ?
bzw. Warum sollte man als Entwickler wollen, dass es mit Reflection möglich ist ?
Ich denke einer der Hauptgründe ist, dass sich damit viele weitere Möglichkeiten der Anwendungsentwicklung und Analyse eröffnen.
Beispielsweise gäbe es die tolle IntelliSense-Funktion von Visual Studio ohne die Metadaten der Assemblies (und Refelection) wahrscheinlich nicht. Auch Ildasm, den .NET Disassembler, gäbe es in dieser Form nicht.
Und die Möglichkeit Code 'on-the-fly' zu generieren (Reflection.Emit) würde auch fehlen...
Das sind alles Gründe für "Reflection".
Mir gings aber um Gründe für "Reflection um die Kapselung zu umgehen".
Oh, tut mir Leid. Falsch verstanden bzw. Topic nicht gelesen..
Original von Tankian
Mir gings aber um Gründe für "Reflection um die Kapselung zu umgehen".
Es erlaubt z.b. dinge wie Serialisierung und Object Mapping, ohne die Kapselung im Design zu beeinflussen (und ohne Mehraufwand)
Reflection zu verwenden um an Daten heranzukommen die dem Programmierer an sich nicht zugänglich sind ist eher die Ausnahme, jetzt abgesehen von Dingen wie Serialisierung & Co. Die Möglichkeit über Reflection an alle Daten und Methoden eines Objekts zu kommen erhöht die Flexibilität erheblich. Versäumnisse des Programmiers lassen sich so auch bis zu einem gewissen Grad korrigieren, wobei das allerdings nicht der Grund für Reflection gewesen sein dürfte 🙂 Aber es ist einer der Gründe weshalb ich es zu schätzen weiß. Gerade auch wenn man eine fertige .NET-Komponennte als Binary hat sieht man oft das sich die Entwickler nicht gut genug gedanken darüber gemacht haben was nun private, protected oder public sein sollte. In dem moment hat man 2 Möglichkeiten: Viel Zeit investieren und alles neu machen oder einen kurzen überlegten Zugriff per Reflection 😉
([bb]|[^b]{2})
ich hab in einem projekt reflection genutzt, um an alle bekannten klassen ranzukommen, die in ein bestimmtes interface implementieren. das war recht cool. ich brauchte nur eine weitere implementation erstellen und ohne weitere codeänderungen konnte die klasse dann überall im proggi verwendet werden.
Es ist ein Programm zum Zeichnen von Kalendern auf ein Bild rauf. Meine Schnittstelle ist IPaint (ein Objekt, dass sich auf ein Bild zeichnen kann) und Beispielklassen sind Schrift und der Sicherheitsrandindikator (macht bei 3 % des bildes einen rand, weil die druckerei nur bis dahin garantieren konnte, dass es dann auch auf dem ausgedruckten sichtbar ist)
also na gut, ich finde reflection geil.
ein teil von .net tv ( http://www.microsoft.com/germany/ms/msdnbiblio/dotnettv/index.htm ) geht auch über reflection. da sagt er irgendwie, dass menschen erwachsen sind, wenn sie über sich selbst nachdenken (reflektieren) und weil .net das kann, ist es ein erwachsenes framework 😁 naja ok bye