我有一個WinForms應用程序,我想跟蹤按鈕被點擊。我想我可以在每個函數的開始處放置一個類似於Console.WriteLine("FUNCTION_NAME");
的東西(當然,FUNCTION_NAME替換爲實際函數的名稱)。我的問題是:有更好的方法嗎?某種編程方式來獲取函數名稱,並在函數運行時用它做些什麼?記錄是否輸入任何功能
回答
有一種方法。使用CallerMemberNameAttribute
。例如: https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute(v=vs.110).aspx#Anchor_7
編輯:
這裏是AOP的在C#的示例: https://msdn.microsoft.com/en-us/magazine/dn574804.aspx
但是性能會嚴重下降。
這看起來不錯!但是,我是否仍然必須在每一個我想使用它的函數中放入一行? – derekantrican
C#不支持面向方面的編程,所以不幸的是,這是不可能的。嗯,確切地說,這在技術上是可行的,但是你的應用運行速度會慢1000倍。 –
通常,在WPF/MVVM中,我們將有一個記錄器的基類,它將使用CallerMemberNameAttribute
,所以您不需要弄清楚調用者。
如果您在課堂上創建記錄器,您可以使用記錄器(NLog,Log4net等),而不是將其寫出,它也會自動完成部分工作。
這是一段代碼。請注意,這是自動更改通知完成,但您可以使用相同的爲您的目的:
[NotifyPropertyChangedInvocator]
protected override void RaisePropertyChanged([CallerMemberName]string property = "")
{
base.RaisePropertyChanged(property);
}
只是改變的函數的名稱很明顯,而且你在它需要的東西。
- 1. 是否有可能proxify任何功能
- 2. 是否有任何Maven睡眠功能?
- 3. 按功能是否有任何numpy組?
- 4. 是否有任何替代功能?
- 5. 找出功能是否有任何輸出與PHP
- 6. 是否有任何Twitter功能登錄到應用程序?
- 7. hbase是否在寫入記錄時讀取任何內容?
- 8. Python如何知道記錄插入是否成功
- 9. 。當我通過任何輸入總是功能返回false
- 10. 功能輸入是假
- 11. 檢查是否有任何輸入值
- 12. Sql Query查找當天輸入的記錄是否是第一條記錄
- 13. 記錄輸出到輸出文件是否影響mongoDB性能?
- 14. SQL功能 - 記錄
- 15. Codeigniter有效記錄插入功能
- 16. 是否有MySQL選項/功能來跟蹤記錄更改的歷史記錄?
- 17. 是否有類(功能,方法等或任何功能)像下面的功能?
- 18. 是否有任何c編譯器實現任何C1X功能?
- 19. 除非某些安全功能被禁用,否則Java記錄框架之一是否有任何方式限制日誌記錄被記錄?
- 20. 我插入空記錄時,我沒有輸入任何東西
- 21. 如何檢查輸入任務中的輸入是否爲空?
- 22. 是否有可能在耙式任務上記錄sql查詢?
- 23. Google腳本中是否有記錄功能?
- 24. 不能檢查MySQLi記錄值是否成功
- 25. 方案能夠記錄用戶輸入
- 26. 檢查記錄是否成功插入到Symfony2中
- 27. 什麼是鍵盤記錄器的基本功能和功能?
- 28. 在Kendo UI中添加記錄功能總是插入兩行
- 29. 此登錄功能是否安全?
- 30. 是否有可能鉤到任何時間檢索功能
作爲一個選項看看這篇文章:[監視Windows窗體應用程序](http://stackoverflow.com/a/39018993/3110834) –