一尘不染

C#静态变量-范围和持久性

c#

我只是做了一个小实验:

public abstract class MyClass
{
  private static int myInt = 0;

  public static int Foo()
  {
    return myInt;
  }

  public static int Foo(int n)
  {
    myInt = n;
    return bar();
  }

  private static int bar()
  {
    return myInt;
  }
}

然后我跑了:

MessageBox.Show(MyClass.Foo().ToString());
MessageBox.Show(MyClass.Foo(3).ToString());
MessageBox.Show(MyClass.Foo().ToString());
MessageBox.Show(MyClass.Foo(10).ToString());
MessageBox.Show(MyClass.Foo().ToString());

我期望的结果是0、3、0、10、0。

令我惊讶的是,我得到了0、3、3、10、10。

这些更改将持续多长时间?程序执行的持续时间?函数调用静态方法的持续时间?


阅读 684

收藏
2020-05-19

共1个答案

一尘不染

它们将在AppDomain期间持续存在。对静态变量所做的更改在所有方法中均可见。

MSDN:

如果使用Static关键字声明了局部变量,则其生存期比声明该过程的执行时间更长。如果该过程在模块内部,则只要您的应用程序继续运行,静态变量就会保留下来。

请参阅以下详细信息:

2020-05-19