Я могу объявить поле внутри статического метода
То, что вы объявили, это не поле, а локальная переменная . Поля не существуют в методах.
Причина этого в том, что поля и свойства представляют состояние объекта. Объект MusicPlayer
может иметь такие свойства, как IsPlaying
, Volume
. Это «состояние» объекта. Состояния принадлежат объекту, а не одному конкретному методу этого объекта, как StartPlaying()
.
Цель локальных переменных - временно сохранить некоторое значение, чтобы помочь методу выполнить свою работу. Они как кусочки макулатуры. У вас может быть метод с именем SolveQuadratic(double a, double b, double c)
, и у вас может быть локальная переменная с именем discriminent
, в которой хранится b * b - 4 * a * c
, так что вам не придется каждый раз переписывать выражение b * b - 4 * a * c
.
Вот почему у вас не может быть свойств внутри методов, статических или иных. Им там не место.