С#: статическая переменная в статическом методе

У вас есть статическая переменная в статическом методе? Будет ли значение этой переменной сохранено во всех вызовах метода?

например.

public static void MyMethod()
{
    static int x = 0;
    x++;
}

Ответы

Ответ 1

Нет.

У вас не может быть локальных статических переменных.

От MSDN:

С# не поддерживает статические локальные переменные (переменные, объявленные в области метода).

И здесь:

Статический модификатор может использоваться с классами, полями, методами, свойствами, операторами, событиями и конструкторами, но не может использоваться с индексаторами, деструкторами или типами, отличными от классов.

Как вы можете видеть, локальные переменные не.


Вы можете, но используйте статическое поле:

public class MyClass
{
    private static int MyVariable = 10;

    public static void MyMethod()
    {
      MyVariable++;
    }
}

Ответ 2

Нет, но вы могли бы:

 private static int x = 0;
 public static void MyMethod()
 {
      x++;
 } 

Ответ 3

С# - объектно-ориентированный язык программирования, C - процедурный язык программирования.

Это в основном означает, что в C логично иметь статическую переменную в функциональном блоке. В С# класс является базовым блоком, поэтому логично иметь только статический член в классе.

Итак, (в двух словах), почему в функциях С# нет статических переменных.

Вы можете использовать статический член в классе и использовать его в функции для получения того же эффекта.

BTW, С++ находится посередине, он вводит OOP в C, но он еще не является чистым ООП. Поскольку функции все еще могут быть автономными, у вас все еще есть статические переменные в функциях.