是否可以使用自定义属性来防止多个方法的执行

本文关键字:方法 执行 可以使 自定义属性 是否 | 更新日期: 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上执行一些代码。但是,即使使用任何属性,你也需要从你的方法中设置一些全局错误,比如"执行",所以我认为使用属性不会有多大帮助。