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

时间:2014-06-10 10:47:28

标签: c# attributes

我有一个现在看起来像

的方法
private void DoOnce()
{
    if(executed)
        return;
    executed = true;
//    Some code here
}

是否可以使用属性隐藏此逻辑。

如果我可以添加一些属性,那将会很好看,例如

[ExecuteOnce]

也会这样做。

.Net Framework中是否内置了对此类内容的支持?

2 个答案:

答案 0 :(得分:0)

如果有人在调用方法之前读取并理解您的自定义属性,是的。

但我认为,除非这不是您计划中的常见模式,否则您可以继续做您现在正在做的事情

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;

    ......
    ......
}

希望这有帮助。

答案 1 :(得分:0)

您可以使用post sharp在方法输入上执行某些代码并执行。但即使使用任何属性,你需要从你的方法设置一些全局falg,如“执行”,所以我不认为使用属性会有很大的帮助。