Реальный ответ почему: никогда не было веской причины делать перечисления более сложными, чем они. Если вам нужен простой закрытый список значений - это оно.
В .Net перечисления получили дополнительное преимущество internal representation
<-> the string used to define them
. Это небольшое изменение добавляет некоторые недостатки версий, но улучшает перечисления в C ++.
Ключевое слово enum используется для объявления
перечисление, отдельный тип, который
состоит из набора именованных констант
вызывается список перечислителей.
Ссылка: MSDN
Ваш вопрос связан с выбранным механизмом хранения, целым числом. Это просто деталь реализации. Мы можем заглянуть только под обложки этого простого типа, чтобы сохранить бинарную совместимость. Иначе перечисления имели бы очень ограниченную полезность.
В: Так почему перечисления используют целочисленную память? Как уже отмечали другие:
- Целые числа быстро и легко сравнивать.
- Целые числа легко и быстро объединяются (поразрядно для
[Flags]
стилей)
- С целыми числами легко реализовать перечисления.
* ничего из этого не относится к .net, и, похоже, разработчики CLR явно не чувствовали необходимости что-либо менять или добавлять к ним золотое покрытие.
Это не значит, что ваш синтаксис не совсем непривлекателен. Но оправданы ли усилия по реализации этой функции в CLR и во всех компиляторах? За всю работу, связанную с этим, она действительно купила вам что-то, чего вы еще не могли достичь (с классами)? Мое чувство кишки - нет, никакой реальной пользы нет. (Есть сообщение от Эрика Липперта , на которое я хотел сослаться, но не смог его найти)
Вы можете написать 10 строк кода, чтобы реализовать в пользовательском пространстве то, что вы пытаетесь достичь без головной боли при смене компилятора. Ваш код пользовательского пространства легко поддерживается с течением времени - хотя, возможно, он не так хорош, как если бы он был встроенным, но в конце концов это то же самое. Вы даже можете использовать шаблон генерации кода T4 , если вам нужно поддерживать многие из ваших пользовательских значений enum-esque в вашем проекте.
Итак, перечисления настолько сложны, насколько это необходимо.