2010-10-14 151 views
1

有沒有辦法知道一個對象的C#方法是否被調用或不使用反射?有沒有辦法知道一個對象的C#方法是否被調用?

+3

請詳細說明。 – 2010-10-14 08:43:03

+0

我的猜測是OP想要一種類似AOP的方式來添加代碼來確定哪些代碼路徑被執行。 – 2010-10-14 08:48:59

+0

謝謝你的寶貴答案。 其實我的場景很簡單。我正在研究一個現有的項目,它使用以下方法來更改數據庫中的值。 如果該類的屬性爲null,則不要在數據庫中更改此值,以便客戶端只能使用需要更改屬性來初始化該類。但有時某些屬性可能會更改爲空,這種情況在當前的邏輯中將不被支持。 – fresky 2010-10-18 03:31:41

回答

0

編號反射只知道一個類型是如何構造的,而不是你的應用程序調用它的方式。

您可以在一個方法內創建一個數組StackFrame以瞭解它是如何被調用的。

Resharper可以檢查的方法被調用或沒有(這是一個Visual Studio插件)

+0

我懷疑Resharper可以以100%的準確度來判斷。 – 2010-10-14 09:37:12

+0

我沒有聲稱會這樣嗎?儘管只要所有組件都在相同的解決方案中,它的確做得很好。 – jgauffin 2010-10-14 09:59:47

0

如果你的問題是如何找出是否一個特定的方法永遠不會在任何情況下和任何輸入被調用,那麼反思就無法爲你做。

您需要工具來執行靜態程序分析,但這些並不完全是爲了在運行時使用。

如果您可以更詳細地描述您要完成的任務,我們可能會提出一個替代方案。

1

找出您的方法是否被調用的一種方法是使用代碼覆蓋工具。 Visual Studio Ultimate包含這些工具來幫助確定代碼覆蓋率。您首先測試您的代碼,然後運行測試,或者正常運行您的應用程序,然後檢查結果。

或者您也可以使用文本編輯器在源代碼中搜索方法名稱。 (這是迄今爲止最簡單的)。

0

如果您想在程序集中找到程序集的任何其他部分都不會調用的任何方法,那麼FxCop有一個「死代碼」規則,它將查找任何此類方法。

死代碼搜索不包括可以從外部世界調用的方法,例如公共方法。

相關問題