2010-12-14 4 views
0

Ich muss eine Methode für ein Objekt aufrufen, aber ich kenne den Methodennamen erst zur Laufzeit.Welche Möglichkeiten gibt es, eine Methode zur Laufzeit aufzurufen?

Was sind die verfügbaren Techniken?

(z GetMethod(). Invoke(), Delegierten, C# 4.0 dynamisch)

Dank!

+5

Sie wissen bereits, was es braucht. Versuchen Sie, den Umfang Ihrer Frage etwas einzuschränken, damit wir kein Buch darüber schreiben müssen. –

+0

@Hans: danke, leider kenne ich nicht alle Möglichkeiten. Nachdem ich diese Frage gepostet hatte, stellte ich fest, dass ich auch IL aussenden konnte. Zumindest hoffe ich auf eine Liste von Techniken für weitere Forschung. Vielen Dank. –

Antwort

2

Die C# 4.0 dynamic Funktionalität wird der einfachste Weg, dies zu tun. In einem sehr realen Sinne ist dynamic "nur ein Wrapper" um Reflection. Es ist ein sehr gut Wrapper, obwohl, das ist wahrscheinlich die beste Option.

Andere Möglichkeiten, in etwa auf Höhe der schwierigen Erhöhung:

  • eine Drittanbieter-Reflection Bibliothek. Nicht sicher, was es in diesen Tagen gibt .
  • Schreiben Sie Ihren eigenen Reflection-Code.
  • Verwenden Sie die CodeDOM zu Code erstellen, der die Methode ruft, die Sie anrufen möchten.
  • Emit IL das tut ziemlich genau die gleiche Sache wie die CodeDOM generierten Code.
  • Erstellen Sie C# Quellcode, den Sie dann in eine Baugruppe kompilieren, die Sie anrufen können, , die ihrerseits die gewünschte Methode ruft.

Die letzten drei sind nichts für schwache Nerven. Am besten verwenden Sie dynamic oder schreiben Sie Ihren eigenen Reflection-Code. Wenn ich vor drei Jahren dynamic gehabt hätte, als ich Code für etwas Ähnliches schrieb, hätte ich es benutzt.

Verwandte Themen