Являются ли переменные в основных методах статическими
Хорошо известно, что статический метод может работать только с статическими элементами.
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.