我有一个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) –