Являются ли переменные в основных методах статическими

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

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

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

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

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