webentwicklung-frage-antwort-db.com.de

was ist die Reflexion in C #, was sind die Vorteile. Wie man es benutzt, um Nutzen zu bekommen

Ich las bei msdn einen Artikel über Reflektion , aber ich konnte ihn nicht einmal 10% über seinen Nutzen, seine Verwendung verstehen.

Könnten Sie bitte einen kurzen Überblick darüber geben, was reflektiert wird und wie ich davon profitieren kann.

35
Shantanu Gupta

Mit Reflection können Sie Code schreiben, der verschiedene Aspekte des Codes selbst untersucht.

Es ermöglicht Ihnen, einfache Dinge zu tun wie:

  1. Überprüfen Sie den Typ eines Objekts zur Laufzeit (z. B. einfache Aufrufe von typeof())

  2. Untersuchen Sie die Attribute eines Objekts zur Laufzeit, um das Verhalten einer Methode zu ändern (die verschiedenen Serialisierungsmethoden in .NET).

Zu viel komplizierteren Aufgaben wie:

  1. Zur Laufzeit eine Assembly laden, eine bestimmte Klasse suchen, feststellen, ob sie mit einer bestimmten Schnittstelle übereinstimmt, und bestimmte Elemente dynamisch aufrufen.

Das frühere ist viel allgemeiner Gebrauch. Letzteres ist hilfreich für Entwickler, die an Plug-in-Architekturen für ihre Anwendungen arbeiten, oder für Personen, die abhängig von Konfigurationsänderungen zur Laufzeit Baugruppen austauschen möchten.

45
Justin Niessner

Reflection ist eine Möglichkeit, Typen zur Laufzeit programmgesteuert zu erkennen. Dies ist sehr wichtig, da .NET-Sprachen stark typisiert sind. Der Zugriff auf diese Metadaten ist äußerst hilfreich.

Eine große Sache im Moment (fließende Schnittstellen/Adapter) sind stark auf Reflexionen angewiesen. Insbesondere ist die statische Reflexion ziemlich groß. Wenn Sie konkrete Beispiele und eine gute Erklärung der statischen Reflexion sehen möchten, lesen Sie:

http://jagregory.com/writings/introduction-to-static-reflection/
http://www.lostechies.com/blogs/gabrielschenker/archive/2009/02/03/dynamic-reflection-versus-static-reflection.aspx

Dies ist natürlich eine kleine Untermenge der Reflexion im Allgemeinen. Weitere Informationen zur allgemeinen Verwendung von Reflektionen finden Sie unter Apress Pro C # 2008 und der .NET 3.5-Plattform, Vierte Ausgabe , Kapitel 16. Es wird ziemlich ausführlich in das .NET-Typsystem eingegangen wie das in Bibliotheken und zur Laufzeit verwendet wird.

13
Jim Schubert

Reflection lässt Ihren Code Methoden und Eigenschaften aufrufen, von denen Sie nicht wussten, wann der Code kompiliert wurde. Eine der integrierten Klassen, die dies verwendet, ist der XmlSerializer. Sie können jedes Objekt übergeben, das Sie in XML konvertieren möchten. Es fragt das Objekt, was alle seine Eigenschaften mit Reflektion verwenden, und kann ein XML-Dokument erstellen, das die erforderlichen Elemente enthält, um das Objekt darzustellen.

8
David

Reflexion ist die Fähigkeit von Typen, Informationen über sich selbst bereitzustellen. Zum Beispiel kann eine Assembly Ihnen sagen, was sie enthält, ein Typ kann Ihnen Methoden, Eigenschaften usw. anzeigen. 

Das dynamische Bereitstellen dieser Informationen ist in vielerlei Hinsicht nützlich. Ein einfaches Beispiel dafür sind Metadaten, die von Web-Services verwendet werden: Wenn eine Person einen Web-Service "konsumiert", wird eine Proxy-Klasse für ihren Client generiert. Dieser Proxy wird aus einem WSDL-Dokument generiert, und das wird meistens aus Typmetadaten generiert, die über Reflektion generiert werden. 

Ein weiteres einfaches Beispiel ist das dynamische Laden von Typen, um Arbeitseinheiten auszuführen. Ein Projekt, an dem ich arbeitete, nutzte Reflektionen, um "Regeln" aus einer Datenbank zu laden und auf Eingaben im System anzuwenden.

5
t3rse

Reflection hilft Ihnen bei der Metaprogrammierung, die unbestritten eine der coolsten Programmiertechniken ist. Google für Metaprogrammierung für weitere Informationen.

1
Jim

Reflection ist ein leistungsfähiger Namespace, der in asp.net verfügbar ist. Dadurch können wir eine dynamische Objektlaufzeit erstellen und it.it aufrufen, die hauptsächlich bei der Entwicklung von Framework-Typanwendungen verwendet wird.

0
Sohil Raval

Reflections haben den Vorteil, dass Sie alle Änderungen im Dataset-Designer wie eine Transaktion in SQL speichern können

0
ALi