Константа не может быть помечена как статическая


Я пытаюсь объявить константу PI следующим образом:

public static const double PI = Math.PI;

но почему я получаю эту ошибку?

The constant 'Calendar.NewCalendar.PI' cannot be marked static
5 81
c#

5 ответов:

const подразумевает static (вам не нужен экземпляр для ссылки const значение).

Я хочу также добавить этот важный момент: когда вы связываете против (ссылки) сборки с public const, это значение будет скопировал в сборку. Так что если const значение в ссылочной сборке изменяется, ваша сборка по-прежнему будет иметь первоначально скомпилированное значение.

если это поведение не приемлемо, то вы должны подумайте о том, чтобы сделать поле a

константа статична по определению.

вы не можете иметь статический const. Попробуйте только для чтения вместо const или просто отбросьте "статический", так как "const" подразумевается статическим в любом случае.

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

все объявления констант неявно статичны, и спецификация C# заявляет, что (избыточное) включение статического модификатора запрещено. Я считаю, что это делается для того, чтобы избежать путаницы, которая может возникнуть, если читатель увидит две константы, одну объявленную статической, а другую нет – они могут легко предположить, что разница в спецификации подразумевает разницу в семантике. Сказав это, нет никакого запрета на избыточное указание модификатора доступа, который также является по умолчанию один, где есть выбор. Например, (конкретный) метод может быть явно помечен как частный, несмотря на то, что это значение по умолчанию. Правило, по-видимому, заключается в том, что там, где нет выбора (например, объявление метода в интерфейсе), избыточный модификатор запрещен. Там, где есть выбор, это разрешено.