Статические переменные принадлежат типу, а не его экземпляру. И обычно (если вы не создаете несколько доменов приложения) объекты типа загружаются только один раз и существуют в течение всего жизненного цикла процесса.
ько что провел небольшой эксперимент:
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.
Как долго эти изменения сохраняются? Продолжительность выполнения программы? Продолжительность функции, вызывающей статический метод?