使用VisualStudio的常見問題是屬性獲取器的神祕調用。如果這些副作用(最常見的形式爲if (foo == null) foo = new foo(); return foo;
),那麼調試器Locals和Watch窗口調用屬性的事實 - 即使沒有任何中斷點 - 也可能在調試時導致意想不到的效果。如何使用NDepend找到哪些屬性獲取者有副作用?
有一個簡單的解決方案,這樣的:剛標記與屬性
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
那麼,怎樣才能找到我可以在一個大的代碼庫的副作用干將的財產?
NDepend是首選這種事情的工具:利用其CQL語言,我可以找到所有這些,例如,直接改變其含有實例的狀態屬性:
SELECT METHODS FROM ASSEMBLIES "FOO"
WHERE IsPropertyGetter AND ChangesObjectState
這隻能找到那些直接改變字段的獲得者:我如何找到間接改變字段的獲得者,例如通過調用Initialize()
方法?
感謝帕特里克。順便說一下,是否可以使用CQL來查找某個方法是否可能通過接口使用? – 2010-07-22 12:03:57
Joel,現在幾乎所有事情都可以通過CQLinq感謝(請參閱我的新答案)如果您有其他需求,請提出一個新問題。 – 2012-06-13 07:50:11
夢幻般的,保持良好的工作! – 2012-06-13 09:07:59