MethodBase Ohne Reflexion
Ein Freund von mir heute früh (zu früh, wenn Sie mich fragen. Es dauert a lil bit, um meine laufenden Motoren) bat mich darum, derzeit Ausführung Methode Informationen. Nun, das ist ziemlich einfach, oder? Wir haben System.Reflection das es uns erlaubt in der aktuellen Codebasis für Informationen aussehen, dass, wie immer die Methoden-Namen als String.
Wir haben gerade einfach nicht ein:
- . MethodBase . GetCurrentMethod ( ) System. Reflection. MethodBase. GetCurrentMethod ()
Bam, haben wir die aktuelle Methode Namen. Aber er wollte dieses sans Reflexion zu tun.
Nun müssen wir dafür sorgen, dass eine Zeile Code zu wenig ein bisschen länger zu berücksichtigen, dass Zwang, sondern, es ist wirklich nicht so komplex. Wir wissen, dass für jede Methode, die in einem beliebigen Thread wir eins von diesen StackFrame Objekte, die auf der Basis dynamischer Stack Datenstruktur geschoben wird ausgeführt wird (dh wir jetzt eine neue StackFrame Objekt auf den callstack). Diese StackFrame Objekte enthalten alle Arten von Informationen, Spaß und dass die Informationen extrahiert werden kann und zu welchem Zweck intrigante Sie im Verstand haben verwendet. Aber denken Sie daran, eine Menge Informationen Methode ist in der Debug-Datei enthalten, so dass, wenn Sie die Release-Schalter baut Ihnen auch einige Daten, die Sie für die Abfrage zu entgehen.
Also erstens, wir produzieren einen neuen StackFrame Objekts:
Jetzt haben wir ein StackFrame Objekt, und wir wissen, dass die StackFrame allerlei MethodBase Informationen, die eingesetzt werden, um Informationen aus Garnitur kann enthält.
So, let's do some MethodBase feuchtigkeitsspendende:
- ; MethodBase methodBase = stackFrame. GetMethod ();
Jetzt, wo Sie diese haben, um bereit zu gehen, können Sie anfangen, den ganzen Spaß an!
Zum Beispiel:
- ; MethodBase methodBase = stackFrame. GetMethod ();
- ; string methodName = methodBase. Name;
- ; bool isStaticMethod = methodBase. isStatic;
- ; bool isPublicMethod = methodBase. IsPublic;
Ready to go! ![]()
3 Kommentare »
RSS-Feed für Kommentare zu diesem Beitrag. TrackBack-URL































"Aber er wollte dieses sans Reflexion zu tun"
Also, was machen wir annehmen, StackFrame verwendet intern auf diese Informationen zu erhalten?
Wenn es für "pädagogische Zwecke" Ich denke, es ist eine berechtigte Frage, aber ich würde System.Reflection.MethodBase.GetCurrentMethod wählen ()
jeden Tag, bevor Sie StackFrame.
/ Jonas
Kommentar von Jonas - 7. Mai 2008 @ 1:52 pm
[...] MethodBase Ohne Reflexion - Adam Buenz zeigt eine alternative Technik für immer an der methodbase mit Stack-Frames. Ich frage mich, ob dies tatsächlich Reflexion frei - ich vermute, Stack-Frame ist die Nutzung der Reflexion - aber es bietet die nützliche Funktionalität des stackframe illustrieren. [...]
Pingback von Reflective Perspektive - Chris Alcock »The Morning Brew # 89 - 8. Mai 2008 @ 12:35 am
Danke! Das hat mich greately hat dazu beigetragen. Ich musste ein Stück Code, der mir, wo das Verfahren wird aus laufen und ich habe es durch die Schaffung einer Art StackTrace Hilfsmethode zeigen würde, zu schreiben.
George
Kommentar von George C # Developer - 23. Dezember 2008 @ 8:35