Урок 46. Константы и перечисления C#
На этом уроке учебника C# для начинающих мы рассмотрим использование констант и перечислений. Они предоставляют два метода описания неизменяющихся значений с использованием описательных слов, а не "магических чисел" для улучшения читаемости кода.
Зачем использовать константы?
Константа подобна переменной, поскольку она определяет имя для значения. Однако константа отличается от переменной тем, что после ее определения значение, присвоенное константе, не может быть изменено. Преимуществом констант является их помощь в создании самодокументирующего кода. Они также позволяют объявлять ключевые значения в одном месте, что упрощает обслуживание, если необходимо обновить значение и перекомпилировать программное обеспечение.
Чтобы продемонстрировать самодокументируемые значения констант, рассмотрим следующую строку кода:
price += (price * 0.175) + 4.99;Вы, вероятно, могли бы понять, что разработчик пытался сделать здесь. Цена увеличивается на 17,5% , а затем добавляется еще £4,99. Однако, если код переписывается с использованием констант вместо магических чисел, цель становится очевидной.
price += (price * ValueAddedTax) + DeliveryCharge;Этот второй пример кода не только легче читать, но и позволяет изменять определения налоговых правил и сборов за доставку в одном месте. Константы могут быть изменены один раз, и новые значения будут автоматически обновлены во всем коде. Примечание: объем постоянной определяется по аналогии с переменной области.
Объявление константы
Константы объявляются с использованием синтаксиса, аналогичного синтаксису других переменных, но с префиксом const . Вот как выглядит предыдущий пример кода с включенными определениями констант:
double price = 100; const double ValueAddedTax = 0.175; const double DeliveryCharge = 4.99; price += (price * ValueAddedTax) + DeliveryCharge;Константы должны быть доступны для вычисления во время компиляции. Это ограничивает использование констант значениями, которые могут быть выражены непосредственно в исходном коде, например числовыми значениями и строками. Значения, которые не могут быть инициализированы без конструктора, не допускаются, то есть константы ссылочного типа могут быть только нулевыми.
Перечисления
Перечисление объявляет ряд связанных констант, каждая из которых имеет целочисленное значение. Перечисления полезны для определения последовательностей и состояний, особенно когда существует естественная прогрессия через эти состояния. Это связано с тем, что каждая константа в списке может быть отформатирована и сопоставлена с использованием ее имени или значения.
Определение перечисления
Самый простой способ объявления перечисления - перечислить все возможные имена в наборе фигурных скобок после имени перечисления. Чтобы указать, что список перечислителей определяется, ключевое слово enum используется в качестве префикса к имени. В этом случае первому элементу в списке присваивается нулевое значение, а каждый последующий элемент увеличивается.
Это простое объявление определяет константу для каждого месяца года:
enum Month { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec }Использование перечисленных значений
После объявления перечисления в классе все методы класса могут использовать значения списка, используя имена списка и отдельного элемента, разделенные с помощью оператора доступа к элементу (.) В следующем примере показано, как значение из списка может быть извлечено и выведено как целочисленное значение или как строка.
Примечание: перечисления могут быть объявлены с более широкими областями видимости, чтобы разрешить их использование в нескольких классах.
class Program { enum Month { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec } static void Main(string[] args) { Console.WriteLine((int)Month.Feb); // "1" Console.WriteLine(Month.Feb); // "Feb" } }Поскольку перечисление предоставляет список связанных числовых значений, можно выполнять простые операции с целочисленными представлениями. В следующем примере объявляется переменная перечисляемого типа. Затем для изменения значения используются математические операторы. Обратите внимание, что при превышении диапазона перечисления значения возвращаются к целочисленным представлениям.
class Program { enum Month { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec } static void Main(string[] args) { Month mon = Month.Jan; for (int i = 0; i<=12; i++) { Console.WriteLine(mon++); } } } /* Вывод Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 12 */Задание значений списка
Во многих случаях необходимо, чтобы значения перечисления начинались с целого числа, отличного от нуля. Возможно, вы даже захотите индивидуально указать каждое значение для списка. Это можно сделать, присвоив значение любому из перечисленных элементов с помощью стандартного оператора присваивания (=). Если вы пропустите значение для любого элемента в списке, ему автоматически будет присвоено значение на единицу больше, чем предыдущему элементу.
class Program { enum IssueStatus { New = 1, Open, Closed, Cancelled = -1 } static void Main(string[] args) { Console.WriteLine((int)IssueStatus.New); // "1" Console.WriteLine((int)IssueStatus.Open); // "2" Console.WriteLine((int)IssueStatus.Closed); // "3" Console.WriteLine((int)IssueStatus.Cancelled); // "-1" } }Примечание: компилятор позволит вам определить несколько элементов с одинаковым целочисленным значением. Это нецелесообразно, поскольку результаты могут быть непредсказуемыми.
Изменение базового типа перечисления
Обычно при объявлении перечисления каждая константа в списке является 32-разрядным целым числом, или int. Это можно переопределить на любой другой целочисленный тип, кроме char, добавив двоеточие (:) и альтернативный тип после имени перечисления.
enum IssueStatus : short { New = 1, Open, Closed, Cancelled = -1 }
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.