2015-05-28 6 views
4

В чем разница между «статическими» и «константными», когда дело доходит до объявления глобальных переменных;Разница между статическими и константными переменными

namespace General 
{ 
    public static class Globals 
    { 
     public const double GMinimum = 1e-1; 

     public const double GMaximum = 1e+1; 
    } 
} 

который один лучше (учитывая, что эти переменные обыкновение меняться никогда)

namespace General 
{ 
    public static class Globals 
    { 
     public static double GMinimum1 = 1e-1; 

     public static double GMaximum1 = 1e+1; 
    } 
} 
+0

Во втором случае я мог случайно перейти в 'General.Globals.GMaximum1 = 2', и это испортило бы много других мест. Только первый безопасен для того, что не должно меняться, если вы не объявите статику как «readonly». –

+0

Подробнее здесь http://stackoverflow.com/questions/2216239/what-is-the-difference-between-a-static-and-const-variable –

ответ

7

Сом. и выполняют только аналогичную функцию для данных, но имеют несколько важных отличий. Постоянный член определяется во время компиляции и не может быть изменен во время выполнения. Константы объявляются как поле, используя ключевое слово const и должны быть инициализированы по мере их объявления.

Модификатор статический используется для объявления статического члена, это означает, что элемент больше не привязан к определенному объекту. Значение принадлежит классу, кроме того, член может быть доступен без создания экземпляра класса. Существует только одна копия статических полей и событий, а статические методы и свойства могут иметь доступ только к статическим полям и статическим событиям.

+0

«Больше не привязан к определенному объекту» означает несколько объектов, использующих такое же статическое имя переменной может ввести в заблуждение значение? Я просто выясняю, что большинство моих статических переменных работают, но некоторые возвращают то, что * я думаю * - значение из другого класса. Быть ненадежным может быть важным различием между ними. – user1566694

+1

@ user1566694 Я укажу вам документы для [статического ключевого слова] (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/static). Вы должны получить доступ к статическому члену, используя имя класса, чтобы устранить ошибку 'Foo.Bar' будет статическим свойством в классе 'Foo', к которому можно получить доступ без экземпляра' Foo'. Если вы не устраните двусмысленность, чем можете попасть в запутанную ситуацию. – t3dodson

4

const переменные не могут быть изменены когда-либо после того, как во время компиляции. Они хороши для вещей, которые действительно постоянны (т.е. pi)

static Пользователи являются общей памятью, доступной для всех экземпляров определенного класса и более, если используются модификаторы доступа, такие как public (они могут восприниматься как переменные глобалов на языках как javascript). Статические члены ведут себя как обычные переменные, которые могут быть переназначены всякий раз.

В вашем случае, если номера гарантированно никогда не меняются, тогда сделайте их const. Если они меняются, вам придется перекомпилировать программу с новым значением.


Какой из них лучше? если вы используете const, тогда литеральные значения становятся испеченными в сборку и обеспечивают повышение производительности.

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

2

const - постоянное значение и не может быть изменено. Он скомпилирован в сборку.

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

Итак, если значения никогда не меняются, используйте константы.

Смежные вопросы