Являются ли переменные в основных методах статичными - PullRequest
14 голосов
/ 16 апреля 2010

Хорошо известно, что статический метод может работать только со статическими элементами.

public static void Main()
{
    Test t1 = new Test();
}

Здесь метод Main является статическим, но я не объявил t1 как статический. Это неявно статично?

Ответы [ 2 ]

23 голосов
/ 16 апреля 2010

Нет, это локальная переменная. Локальные переменные ведут себя одинаково, независимо от того, объявлены они в статических или экземплярах методов.

Как очень грубое руководство (захваченные переменные и т.д. вносят сложности):

  • Переменные экземпляра: одна переменная на экземпляр
  • Статические переменные: одна переменная для самого типа
  • Локальные переменные (включая параметры): одна отдельная переменная для каждого вызова метода
10 голосов
/ 17 апреля 2010

Хорошо известен тот факт, что статический метод может работать только со статическими элементами

Это не факт; это ложь Там нет никаких ограничений вообще; Статические методы имеют полный доступ ко всем членам их типа:

class C 
{
    private int x;
    static C Factory()
    {
        C c = new C();
        c.x = 123;
    }
}

Фабрика - статический метод; он имеет доступ к закрытым членам экземпляра любого экземпляра C.

...