c#匿名方法,类属性值在函数调用之间回滚

时间:2011-06-09 08:53:58

标签: c#

我有这样的代码:

public class SomeClass
{
     private bool Flag;

     public void OnBar() //this is called from DoSomething();
     {
        if (Flag) //For some reason Flag=false
     }

     public void OnFoo() //this is called from some anonymous method (not mine)
     {
        Flag = true;
        DoSomething();
     }
}

Callstack看起来像这样: AnonymousMethod(); OnFoo(); 做一点事(); 的OnBar();

我已经阅读了MSDN关于使用匿名方法的外部变量的文章,但它们适用于局部变量,类级变量怎么样。

为什么在OnBar()方法中Flag是错误的,以及如何解决这个问题。

1 个答案:

答案 0 :(得分:3)

这绝对与匿名方法无关。它必须是DoSomething内发生的事情。 基本上有两种可能性:

1)在DoSomething

中重新设置标志
private void DoSomething()
{
    Flag = false;
    OnBar();
}

2)DoSomething创建SomeClass的新实例并在其上调用OnBar

private void DoSomething()
{
    new SomeClass().OnBar();
}