我有一个现在看起来像
的方法private void DoOnce()
{
if(executed)
return;
executed = true;
// Some code here
}
是否可以使用属性隐藏此逻辑。
如果我可以添加一些属性,那将会很好看,例如
[ExecuteOnce]
也会这样做。
.Net Framework中是否内置了对此类内容的支持?
答案 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,如“执行”,所以我不认为使用属性会有很大的帮助。