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

本文关键字:函数调用 之间 属性 方法 | 更新日期: 2023-09-27 17:58:56

我有这样的代码:

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();
     }
}

调用堆栈如下所示:匿名方法();OnFoo();DoSomething();OnBar();

我读过MSDN上关于使用匿名方法的外部变量的文章,但它们适用于局部变量,类级变量又如何呢。

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

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

这与匿名方法毫无关系。它一定是DoSomething内部发生的事情。基本上有两种可能性:

1) 在DoSomething:中重新设置标志

private void DoSomething()
{
    Flag = false;
    OnBar();
}

2) DoSomething创建SomeClass的一个新实例,并在此实例上调用OnBar

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