112
позволило бы менять значения полей из других методов, что может быть
недопустимо. Чтобы это исключить, можно поля объявить константами с
помощью ключевого слова const.
Тогда изменить их уже будет
невозможно.
Итак, можно создать абстрактный класс и поля объявить
константами. В этом случае невозможно будет создать его экземпляры, и
можно будет только считывать значения его полей. В предыдущий проект
добавим абстрактный класс AbsOklad:
abstract class AbsOklad
{
public const int oklad1 = 25000;
public const int oklad2 = 30000;
public const int oklad3 = 35000;
}
и в процедуру Main() запишем код
Human wrk1 = new Ingener("Иванов", "Василий", "Петрович",
46, AbsOklad.oklad3);
wrk1.Info();
Human wrk2 = new Ingener("Сидоров", "Семен", "Алексеевич",
42, AbsOklad.oklad2);
wrk2.Info();
Получим
Иванов Василий Петрович, 46 лет, зарплата 35000 руб
Сидоров Семен Алексеевич, 42 года, зарплата 30000 руб
Как видим, класс для хранения значений окладов получился
существенно проще, но у нас нет возможности индексировать оклады, так
как они объявлены константами.
2.4.3. Перечисления
Для хранения целочисленных констант
также можно использовать
перечисления. Перечисления представляют собой набор именованных
целочисленных констант. К константам можно обращаться по имени.
Перечисления описываются так:
enum имя_перечисления
{
113
константа1,
константа2,
……
константаN
}
Здесь константа – это имя константы возможно с присвоенным ему
значением. Константы предполагаются типа int. Можно использовать
любой другой целочисленный тип, в этом
случае он указывается в
заголовке через двоеточие.
Константы принимают присваиваемые им значения. Если для
некоторой константы инициализация не проводится, то константа1
принимает значение нуль, а любая другая - на единицу больше, чем
предыдущая. Например, в перечислении
enum sss
{
a,
b,
c=5,
d
}
получим a=0,b=1,c=5,d=6.
Перейдем к примеру. Создадим
следующее перечисление
enum Stafka
{
oklad1 = 25000,
oklad2 = 30000,
oklad3 = 35000
}
Класс Ingener перепишем так:
class Ingener: Human
{
private Stafka oklad;
public override int ZarPlata()
{
return (int)oklad;
114
}
public Ingener(string lastname, string name, string
secondname, int age, Stafka oklad)
: base(lastname, name, secondname, age)
{
this.oklad = oklad;
}
}
Здесь мы у поля oklad установили тип Stafka, в
оператор return
добавили явное преобразование типа и в заголовке конструктора изменили
тип последнего параметра. Все эти изменения связаны с тем, что, хотя при
инициализации членов перечисления используются значения типа int, для
обратного перевода значений членов в числовой тип надо использовать
явное преобразование.
В Main() впишем код
Human wrk1 = new Ingener("Иванов", "Василий", "Петрович",
46, Stafka.oklad3);
wrk1.Info();
Human wrk2 = new Ingener("Сидоров", "Семен", "Алексеевич",
42, Stafka.oklad2);
wrk2.Info();
После выполнения, как и выше, получим
Иванов Василий Петрович, 46 лет, зарплата 35000 руб
Сидоров Семен Алексеевич, 42 года, зарплата 30000 руб
В отличие от обычных классов перечисления относятся к значимым
типам. Поэтому при использовании перечислений программа будет
занимать меньше места в памяти и быстрее выполняться.
Все
перечисления
являются
потомками
базового
класса
System.Enum, который обладает рядом статических методов. Эти методы
можно использовать для работы с перечислениями. Рассмотрим некоторые
из них. Метод Format позволяет найти
член перечисления по его
значению. Этот метод имеет три параметра: имя перечисления, значение
искомого члена и режим вывода. Если требуется вывести имя члена с
заданным значением, то следует указать режим "G".
Еще возможны
режимы "X" и "d". В этих случаях будет выведено значение,
соответственно, в шестнадцатеричной и десятичной системах исчисления.
Например, операторы
115
Console.WriteLine(Enum.Format(typeof(Stafka),30000,"G"));
Console.WriteLine(Enum.Format(typeof(Stafka),30000,"X"));
Console.WriteLine(Enum.Format(typeof(Stafka),30000,"d"));
выведут на консоль строки
oklad2
00007530
30000
Здесь метод typeof() используется для получения объекта System.Type
для указанного типа.
Рассмотрим второй метод. Метод GetValues() позволяет создать
массив на основе перечисления. Этот массив будет принадлежать классу
Array. Чтобы можно было обращаться к его элементам,
этот массив
следует привести к типу int[], например, с помощью операции
приведения к типу. При выполнении операторов
Достарыңызбен бөлісу: