Was sind die verschiedenen Möglichkeiten, ein Verfahren zur Laufzeit aufrufen?
-
10-10-2019 - |
Frage
Ich brauche eine Methode für ein Objekt zu nennen, aber ich weiß nicht, den Namen der Methode erst zur Laufzeit.
Was sind die Techniken zur Verfügung?
(z. GetMethod (). Invoke (), Delegierten, c # 4.0 dynamisch)
Danke!
Lösung
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 Reflexion. Es ist eine sehr gut Wrapper aber, dass wahrscheinlich die beste Wahl ist.
Weitere Möglichkeiten, in etwa zunehmenden schwieriger:
- eine Drittanbieter-Spiegelung verwenden Bibliothek. Nicht sicher, was da draußen in diesen Tagen.
- Schreiben Sie Ihre eigenen Reflection-Code.
- Verwenden Sie die CodeDOM zu erstellen Code, der die Methode aufruft Sie anrufen möchten.
- Emit IL, der tut so ziemlich das gleiche wie die CodeDOM generierten Code.
- Erstellen Sie C # Quellcode, dass Sie dann kompilieren in eine Baugruppe, dass Sie anrufen können, was wiederum ruft das gewünschte Verfahren.
Die letzten drei sind nicht für schwache Nerven. Ihre beste Wette ist dynamic
zu verwenden oder eigene Reflexion Code zu schreiben. Wenn ich vor dynamic
drei Jahren hatte, als ich Code für etwas ähnliches zu schreiben, würde ich es benutzt haben.
Andere Tipps
Sie können die Reflexion zu Anruffunktionen nutzen, dass Sie nicht den Namen bis zur Laufzeit nicht kennen. Hier einige doc:
http://msdn.microsoft.com/ en-us / library / f7ykdhsy% 28VS.80% 29.aspx