我有C#功能是這樣的:查找函數調用程序
private void test(){}
有沒有辦法找到祈求或函數的調用者?
例如:
private void Caller(){
test();
}
那麼我怎麼能理解測試由主叫調用?
我有C#功能是這樣的:查找函數調用程序
private void test(){}
有沒有辦法找到祈求或函數的調用者?
例如:
private void Caller(){
test();
}
那麼我怎麼能理解測試由主叫調用?
您可以從調用堆棧獲取方法的名稱。
當你調用一個函數時,這個名字也作爲其他信息被推送到調用堆棧,所以程序知道如何從該函數調用返回。您可以使用該信息獲取調用test()函數的前一個函數。
要獲得堆棧跟蹤,你可以使用以下命令:
StackTrace stackTrace = new StackTrace();
StackFrame[] stackFrames = stackTrace.GetFrames();
Console.WriteLine(stackFrames[1].GetMethod().Name);
您肯定需要查看@TheSuperTramp(+1 BTW)提供的鏈接。無論你做什麼,都要以各種可能的方式進行徹底的測試。這很可能在很多情況下咬你,也就是說。調試和發佈版本可能會有不同的表現,在調試時它可能是另一種體驗。請參閱[Jon Skeet的回答](http://stackoverflow.com/questions/6108584/how-to-get-invoker-class-of-this-method/6108600#6108600)以及添加到其中的意見以供進一步參考。 – takrl
好點tarkrl!這只是獲取方法名稱的一種快捷方式。我不會推薦在任何生產代碼中使用它。例如,如果您更改方法名稱,會發生什麼情況? – OsQu
不要問我:)我曾經嘗試過使用它,並有調試/發佈構建問題,並且從此我從未使用它。還有其他方法可以實現更可靠的需求。但是每次我看到這樣的問題,我都會指出Jon Skeet的回答,因爲它總結得非常好。 – takrl
使用呼叫者的參數,這將是在不同的方法調用test.like當你從呼叫者使用測試從anotherCaller使用測試呼叫測試(1)當你從另一個函數調用說(2)
您可以將字符串參數測試,
private void test(string whoCalled){}
如果在來電,
private void Caller() {
test("Caller");
}
你指的是Visual Studio的所有_find References_?還是你在運行時? –
如果你的邏輯取決於你的調用者,它應該是你班上的另一種方法。他們絕對是不同的行爲。如果你想要一個調試跟蹤或StackTrace trace = new StackTrace();並得到你的東西。 – Peter