我有一个WinForms应用程序,我想跟踪点击的按钮。我想我可以在每个函数的开头添加类似^\s*$[\r\n]*
的东西(当然,FUNCTION_NAME替换为实际函数的名称)。我的问题是:有更好的方法吗?在函数运行时获取函数名称并用它做某事的某种编程方式?
答案 0 :(得分:0)
有一种方法。使用CallerMemberNameAttribute
。例:
https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute(v=vs.110).aspx#Anchor_7
修改强>
以下是C#中AOP的示例: https://msdn.microsoft.com/en-us/magazine/dn574804.aspx
但性能会严重下降。
答案 1 :(得分:0)
通常,在WPF / MVVM中,我们将为使用CallerMemberNameAttribute
的记录器设置一个基类,因此您无需弄清楚调用者。
您可以使用记录器(NLog,Log4net等)而不是写出来,如果您在类中创建记录器,它也会自动执行部分工作。
这是一个片段。请注意,这是针对自动更改通知执行的,但您可以将其用于您的目的:
[NotifyPropertyChangedInvocator]
protected override void RaisePropertyChanged([CallerMemberName]string property = "")
{
base.RaisePropertyChanged(property);
}
显然只需更改功能名称,并在其中执行所需操作。