2010-01-31 7 views
10

Mit System.Reflection, kann ich alle Methoden von einer bestimmten Klasse bekommenWie ich alle Referenz mit Reflection + C# bekommen

Ich muss wissen, was die Verweise auf diese Methoden sind. Zum Beispiel: Wenn Sie in Visual Studio, wollen die Referenzen von spezifischen Objekt

  • direkt auf das Objekt klicken und wählen Sie „Alle Verweise suchen“
  • Visual Studio zeigen die Referenzen des ausgewählten Objekts

Ich möchte das selbe machen, aber vom Code mit Reflektion oder einem anderen Weg.

Kann ich das tun?

+4

** Warum ** sind Leute, die diese Frage aufheben? Es ist voll von Tippfehlern und grammatikalischen Fehlern, und es verlangt etwas, das im besten Fall praktisch keinen Zweck hat (es sei denn, du versuchst, Reflector neu zu erfinden) und führt höchstwahrscheinlich zu einem eigenen DailyWTF-Artikel in ferner Zukunft. – Aaronaught

+0

@Aaronaught Up-VotdEd nur für ryou nur :) –

+1

@Aaronaught (und diejenigen, die seinen Kommentar hochgewählt) schlecht "engrisch" nervt mich auch, aber durch meine Jahre des Aushängens im Stapel Austausch habe ich herausgefunden, dass die entsprechende Was in diesen Fällen zu tun ist, ist, die Frage zu bearbeiten, um den "Entrish" zu beheben, anstatt sich zu beschweren. –

Antwort

5

Dies kann nicht mit Reflexion erfolgen. Reflection ist ein Tool zum Überprüfen von Metadaten und Assemblys. Um alle Verweise auf eine bestimmte Methode/einen bestimmten Typ zu finden, müssen Sie die zugrunde liegende AWL einer Assembly überprüfen. Reflection hat nur sehr begrenzte IL-Fähigkeiten (gibt sie einfach als Byte-Array zurück). Sie müssen diesen Byte-Stream benutzerdefiniert überprüfen, um einen Kontext zu dessen Referenz zu erhalten.

+1

wissen Sie, wie ich es tun kann ??? ... oder haben Sie ein Codebeispiel? ... Danke. –

+1

Oh großartig, es ist ein anderes "PLZ senden die Codez." – Aaronaught

2

Dies ist nicht direkt über Laufzeit-Reflektion auf eine bestimmte Klasse zugänglich. Sie müssen die gesamte Quellcodebaumstruktur oder die resultierende IL überprüfen, um festzustellen, ob Verweise auf eine bestimmte Methode mit demselben Namen die richtige Überladung und Signatur für die Methode darstellen, nach der Sie Verweise suchen.

Darüber hinaus werden Sie nie ohne zusätzliche Arbeit Verweise auf eine bestimmte Methode finden, die selbst durch Reflektion aufgerufen werden. (Dies ist ein Grund, warum Verschleierung dieser Art von Code herausfordernd und fehleranfällig ist.)

0

Microsoft veröffentlicht die Common Compiler Infrastructure Projekte unter einer Open-Source-Lizenz. Diese Projekte zielen darauf ab, viele Compiler-bezogene Funktionen zu unterstützen, einschließlich der Assembly-Analyse, auf die Sie sich beziehen. Da die Dokumentation begrenzt ist, benötigen Sie ein gründliches Verständnis von ECMA-335 (Common Language Infrastructure), um es effektiv für Ihre Zwecke verwenden zu können.

Hier gibt es keine magischen Codebeispiele. Dies ist eine große und ziemlich komplizierte Aufgabe, bei der Sie auf sich selbst gestellt sind.

Verwandte Themen