2013-01-09 53 views
5

我有一個C#類,它有太多的代碼,我想要refactor它。我想要做的是從所有public methods開始,併爲每一個創建一個tree,顯示該類中的其他哪些方法是從中調用的,然後是哪些方法從子方法中調用,等等。如何從C#類方法中找到調用哪些方法 - 不是在運行時

這將使我看到這private methods只屬於一個public method,這是共享的,等等。

請注意,我不想在運行時執行此操作,我希望能夠直接在.cs file上查看某個課程,或者在編譯的DLL上使用反思。

我知道我可以在編譯後的DLL上使用反射來獲取這些方法,但是我找不到找到哪些方法被類中的其他方法調用的方法。

任何任何想法?再次,這是不是一個運行時間的問題,這純粹是建立一個可重複使用的工具,以幫助重構一個超大的類。我正在研究的解決方案中有很多,所以代碼會一遍又一遍地被使用。

+0

Resharper有這個。它會告訴你一種方法的所有用法。 >「查看調用層次」 - 在法 – Oded

+3

右鍵單擊? –

+2

如果你想推出自己的:http://stackoverflow.com/a/5741770/16959這是一個非常好的研究在這個問題上的答案 –

回答

10

Visual Studio 2010具有「查看調用層次結構」的操作,您可以在其中查看調用代碼的解決方案中的所有位置。

從我的經驗這種靜態分析可能是有所欠缺,例如方法可以動態使用反射,被稱爲通過數據綁定,通過依賴注入容器等

而且,這可能是有點題外話,和不適用於你的情況,但是我發現找到組件死代碼的一個好方法是有一套集成測試。然後你可以運行代碼覆蓋,並直觀地看到永遠不會執行哪些代碼路徑。

+2

+1反射評論,DI等 –

+0

塞巴斯蒂安 - 感謝您的回覆,但如果您閱讀我對上面的Oded和unicron的回覆,您將會看到爲什麼這個功能不夠強大,無法滿足我的需求。測試是一種有趣的方法,但現在對現有的(甚至是非常大的)類進行太多的工作,並且很難分析以查看所謂的內容。 –

+1

查看調用層次結構實際上顯示了一種雙樹 - 或樹和根:)所以,你可以看到調用給定的方法以及所有通過給定的方法調用的方法的所有方法。 –

相關問題