Почему в const нельзя внести значение в static конструкторе? Почему const инициализируется именно во время компиляции и как этот процесс происходит?
Константы инициализируются во время компиляции, остальное во время работы программы: static во время обращения к классу, остальные поля (не static) - во время создания экземпляра.
Вопрос: почему константы инициализируются именно во время компиляции? Они ведь являются static, почему им нельзя присвоить значение в static конструкторе?
Как вообще это происходит:
если константы инициализируются, то для этого нужно обратиться к классу, чтобы понять, что внутри него в принципе существуют константы и считать их значения, а значит static тоже должны были отработать и быть инициализированы, как и static конструктор. Но видимо этого не происходит, а значит, обращения к классу нет? Тогда как считываются значения констант и почему без обращения к классу мы не можем к ним обращаться?
Например: Console.WriteLine(MyClass.PI)?
Почему нельзя: Console.WriteLine(PI)? Так как неизвестно где находится PI. Тогда как не зная где находится PI и что он в принципе существует компилятор вносит значение на этапе компиляции не обращаясь к классу?