Если компилятор знает, что значение является постоянным и никогда не изменится, он может скомпилировать значение непосредственно в вашу программу.
Если вы объявляете pi
константой, то каждый раз, когда он видит pi / 2
, компилятор может выполнить вычисление и вставить 1,57 ... непосредственно в скомпилированный код. Если вы объявите pi
в качестве переменной, то каждый раз, когда ваша программа использует pi / 2
, компьютеру придется ссылаться на переменную pi и умножать ее на 0,5, что, очевидно, медленнее.
Я должен также добавить, что в C # есть readonly
, который предназначен для значений, которые компилятор не может вычислить, но которые не могут изменяться в течение времени выполнения вашей программы. Например, если вам нужна константа ProgramStartTime
, вам придется объявить ее readonly DateTime ProgramStartTime = DateTime.Now
, потому что она должна быть оценена при запуске программы.
Наконец, вы можете создать свойство только для чтения, предоставив ему метод получения, но не установщик, например:
int Months { get { return 12; } }
но, будучи свойством, оно не обязательно должно иметь одинаковое значение каждый раз, когда вы его читаете, например:
int DaysInFebruary { get { return IsLeapYear ? 29 : 28 } }