teoadal
@teoadal
.NET + AS3

Чем плох enum в C#?

Добрый день!

Пытаюсь ликвидировать пробел в знаниях. Некоторые коллеги почему-то против применения enum'ов в C#. Почему - всё время какие-то маловразумительные ответы или просто "почитай". Пытался почитать - ничего интересного не нашел. По мне так одни плюсы. Например, для идентификации единиц измерения в вычислительных программах очень удобно и наглядно.

Так чем же плох enum?
Подозреваю, что enum плох на уровне IL. Но копать так глубоко пока нет знаний.
  • Вопрос задан
  • 4076 просмотров
Решения вопроса 2
GavriKos
@GavriKos
Возьмите пиво и допросите своих коллег - пусть альтернативу предлагают. Ничем enum не плох - удобная вещь.
Ответ написан
alex1t
@alex1t
.net developer
Обычно, когда говорят, что enum плох, то имеют в виду что он не несёт в себе дополнительного поведения. Т.е. его нельзя расширить, добавить новую семантику, самопроверку и прочее. Так, для тех же единиц измерения помимо самого имени в enum (Units.Watt) нужно ещё иметь обычно выводимое имя (Ватт), способ конвертирования и ещё чего-нибудь. Поэтому в этом случае общая рекомендация состоит в создании иерархии классов, наследуемых от общего абстрактного класса.
Например:
public abstract class Unit
{
   int _enumValue;
   public string Name {get;private set; }

   implicit operator int(Unit value) {return this._enumValue; } // обычно нужно для сохранения во внешнем хранилище или передаче по сети - по сути аналог обычного enum
   // ... и т.д.
}

public class Watt : Unit {
     Watt() { Name = "Ватт"; }
}

К этому ещё надо подключать фабрику для их восстановления из int и что-то ещё насколько я помню. Где я про это читал сейчас не могу вспомнить - но смысл такой.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Oxoron
Шарпер
Если не секрет, а какая альтернатива? Байты использовать (инты)?
Могут возникнуть заморочки при изменениях кода, когда пары Строковое обозначение - байтовое значения меняются, но это редкость и лечится обязательной простановкой числовых значений при объявлении enum-а.
Ответ написан
AxisPod
@AxisPod
Вот выпытайте чем плох, как-то даже интересно стало. Или плох тем, что в отличии от большинства языков программирования ему можно присвоить значение которого в нём не объявлено? Но это видимо было сделано в угоду FlagsAttribute. Другого даже не могу предположить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы