Ich weiß, dass du es kannst
this.GetType().FullName
Um die
My.Current.Class
Aber was kann ich anrufen, um die
My.Current.Class.CurrentMethod
Ich weiß, dass du es kannst
this.GetType().FullName
Um die
My.Current.Class
Aber was kann ich anrufen, um die
My.Current.Class.CurrentMethod
Sie können auch Folgendes verwenden MethodBase.GetCurrentMethod()
was den JIT-Compiler daran hindert, die Methode, in der sie verwendet wird, zu inlinen.
更新しました。
Diese Methode enthält eine spezielle Aufzählung StackCrawlMark
die nach meinem Verständnis dem JIT-Compiler mitteilt, dass die aktuelle Methode nicht inlined werden soll.
Dies ist meine Interpretation des Kommentars zu dieser Aufzählung im SSCLI. Der Kommentar folgt:
// declaring a local var of this enum type and passing it by ref into a function
// that needs to do a stack crawl will both prevent inlining of the calle and
// pass an ESP point to stack crawl to
//
// Declaring these in EH clauses is illegal;
// they must declared in the main method body
Haben Sie eine Referenz, die erklärt, wie GetCurrentMethod
das JIT am Inlining der aufrufenden Methode hindert?
@Luke, ich habe meine Antwort mit dem Grund aktualisiert, warum ich glaube, dass die Methode das Inlining verhindern wird.
Danke, das ist sehr interessant, obwohl mir nicht ganz klar ist, ob es das Inlining der Methode verhindert, die die lokale StackCrawlMark
oder der Aufrufer dieser Methode.
Quelle: System.Reflection.MethodBase.GetCurrentMethod().Name
ist keine gute Wahl, denn es wird nur der Name der Methode ohne zusätzliche Informationen angezeigt.
Wie für string MyMethod(string str)
wird die oben genannte Eigenschaft nur MyMethod
was kaum angemessen ist.
Es ist besser zu verwenden System.Reflection.MethodBase.GetCurrentMethod().ToString()
die die gesamte Signatur der Methode zurückgibt...
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
11 Stimmen
this.ToString()
gibt Ihnen den aktuellen Klassennamen nur, wenn Sie nichts Besonderes in Ihrem eigenenpublic override string ToString()
.GetType().FullName
gibt immer Ihren vollen Namen an.0 Stimmen
@Pasi danke, werde meine Implementierung ändern
6 Stimmen
In .Net 4.5 können Sie das Attribut CallerMemberNameAttribute verwenden, um den Namen des Aufrufers zu erhalten. Siehe msdn.microsoft.com/de-us/library/ ... Sie können dann den Körper Ihrer Funktion in eine anonyme Funktion wie in ([CallerMemberName] string functionName = "")=>{ } verpacken. Die Probleme bei der Verwendung der Reflection-Methode wie in der akzeptierten Antwort bestehen darin, dass (1) die Funktion möglicherweise inlined wird und/oder (2) der Funktionsname verschleiert werden kann, wenn er nicht öffentlich ist und der Code verschleiert wird.
2 Stimmen
Es handelt sich nicht wirklich um eine doppelte Frage. In der ursprünglichen Frage wird speziell nach "Reflexion" gefragt. Einige der Antworten hier beruhen nicht auf Reflexion.
0 Stimmen
Um asynchrone Methoden zu unterstützen, können Sie GetCurrentMethodFullName() von Verwenden von System.Reflection zum Abrufen des vollständigen Namens einer Methode