是否可以使用自定义属性来防止多个方法的执行
本文关键字:方法 执行 可以使 自定义属性 是否 | 更新日期: 2023-09-27 18:07:50
我有一个方法现在看起来像
private void DoOnce()
{
if(executed)
return;
executed = true;
// Some code here
}
是否可以使用属性来隐藏这个逻辑?
如果我能添加一些属性,那看起来就不错了,例如
[ExecuteOnce]
可以做同样的事情。
在。net框架中是否有对这些东西的内置支持?
如果有人在调用方法之前读取并理解您的自定义属性,是的。
但我认为,除非这不是你的程序中常见的模式,否则你可以继续做你现在正在做的
1) DoOnce()
明确描述方法的行为
2)内部代码清晰易懂
编辑
你也可以考虑其他的解决方案,如:
bool IsInRecursion(string methodName)
{
const int iCallDeepness = 1;
System.Diagnostics.StackTrace stack = new System.Diagnostics.StackTrace(false);
System.Diagnostics.StackFrame sframe = stack.GetFrame(iCallDeepness);
return (methodName == sframe.GetMethod().Name);
}
,考虑到iCallDeepness = 1
,你可以像
void DoOnce()
{
if(IsInRecursion("DoOnce"))
return;
......
......
}
您可以使用post - sharp在方法入口和execute上执行一些代码。但是,即使使用任何属性,你也需要从你的方法中设置一些全局错误,比如"执行",所以我认为使用属性不会有多大帮助。