Andriy Shyrokoryadov

.Net developer, data scientist

Что такое enum - вопрос №15 на собеседование C# / .NET

Текст к видео "Что такое enum" на канале YouTube

Перед началом ответа на данный вопрос необходимо оговорится, что enum это не тоже самое, что enumerator. Enumerator – это класс или структура которая имплементирует IEnumerable, а enum – это определенный тип данных.

Иногда, во время имплементации определенной функциональности программисты пользуются типом целых числе (int) для отнесения объектов к определенной категории, которая определяется значение переменной типа int. Например – директор компании это 0, управляющий персонал / заместители директора – 1, а рядовые сотрудники - 2. Это способ, который можно использовать, но он имеет ряд недостатков. Например, при большем количестве категории легко можно потеряться и не вспомнить, что значит категория 84. Для подобных задач существует более удобный способ.

Для того, чтобы решить задачу, указанную в предыдущем абзаце, можно создать тип который будет содержать реальные названия категорий, то есть 0 – это Director, 1 – это Management, 2 – это Employee. Такой тип данных называет enum. Данный тип является значимым. По факту при декларировании этого типа существует привязка к значениям типа int. Например указывая везде в коде значение Director, по факту приложение использует значение типа int 0.

Естественно, это не всегда удобно использовать нумерацию от 0. При декларировании типа enum программист может задать конкретные значения типа int каждому из возможных значений enum.
Стоит также добавить, что значения int могут быть разными и не обязательно должны идти по порядку.

Иногда возникает потребность изменить привязку к типу int. Это также возможно. Привязку можно поменять на любой из доступных значимых типов определенных в .NET. Тип enum получает функциональность типа System.Enum, среди которой есть метод GetUnderlyingType. Этот метод позволяет получить тип, к которому осуществлена привязка типа enum.