Я читав деякі переліки, і вважаю, що вони дуже схожі на оголошення констант. Як би я знав, коли використовувати константу, а не перелік чи навпаки. Які переваги використання перелічень?
Я читав деякі переліки, і вважаю, що вони дуже схожі на оголошення констант. Як би я знав, коли використовувати константу, а не перелік чи навпаки. Які переваги використання перелічень?
Відповіді:
Використовуйте перелічення, коли ви хочете визначити діапазон значень, якими може бути щось. Яскравим прикладом є колір:
public enum Colour
{
White,
Red,
Blue
}
Або, можливо, набір можливих речей, таких як: (Приклад, який я вкрав звідси, як мені лінь)
[FlagsAttribute]
enum DistributedChannel
{
None = 0,
Transacted = 1,
Queued = 2,
Encrypted = 4,
Persisted = 16,
FaultTolerant = Transacted | Queued | Persisted
}
Константи повинні бути для одного значення, наприклад PI. Існує не діапазон значень PI, є просто PI.
Інші моменти, на які слід звернути увагу:
Type Safety"
В інших відповідях бракує того, що перелічення мають цілочисельний базовий тип. Ви можете змінити значення за замовчуванням з int на будь-який інший інтегральний тип, крім символу типу:
enum LongEnum : long {
foo,
bar,
}
Ви можете явно передати базовий тип і неявно до нього, що корисно в операторах switch. Пам'ятайте, що можна передати будь-яке значення базового типу в перелік, навіть якщо в переліку немає члена з відповідним значенням. Тому завжди використовувати розділ за замовчуванням у комутаторі - це гарна ідея. До речі, .NET сам дозволяє навіть перелічення з плаваючою комою, але ви не можете визначити їх у C #, хоча я думаю, що ви все одно можете їх використовувати (крім перемикача).
Крім того, використання перелічень забезпечує більшу безпеку типу. Якщо ви маєте намір використовувати, наприклад, константи int як параметри методу, тоді я міг би викликати метод із будь-яким значенням int. Звичайно, за допомогою кастингу це може статися і з переліками, але це станеться не випадково. Гірша можливість переплутати порядок параметрів.
void method(int a, int b) {...}
Якщо константа A може переходити лише в a, а константа B може переходити в b, то використання двох різних типів перечислення виявить будь-яке неправильне використання під час компіляції.
Константа - це функція мови, яка говорить, що змінна не змінить значення (тому компілятор може робити оптимізацію навколо цих знань), де перелік є певним типом.
Константи можуть бути будь-якого типу даних, але перелік - це перелік.
Я використовую перерахування в будь-якому місці, де ви можете мати безліч варіантів і хочете поліпшити читабельність коду. тобто ви можете мати рівні трасування як int зі значеннями 0, 1, 2 або як перелік як помилку, попередження та інформацію.
Enum також можуть використовуватись як розрядні оператори, тобто FontStyle.Bold | FontStyle.Italic надасть вам жирні та курсивні шрифти.
На додаток до відповіді Роберта:
Використовуйте перелік для кінцевого набору іменованих значень. Вас насправді не цікавить числове значення кожного символу (але ви все одно можете накласти їх, наприклад, для сумісності із застарілою системою).
Роберт: Так, Enum можна використовувати як бітові поля. Використовуйте атрибут Flags (і переконайтесь, що члени переліку мають відповідні числові значення).
Константа AC # подібна до змінної тим, що вона надає визначеному імені значення. Однак константа відрізняється від стандартної змінної, оскільки після визначення значення, призначене константі, ніколи не може бути змінено. Головною перевагою констант є їх допомога у створенні коду, що самодокументовується, а також дозволяють декларування ключових значень в одному місці, що дозволяє легко підтримувати обслуговування, якщо значення потрібно оновити та перекомпілювати програмне забезпечення.
Тоді як списки Enumerator корисні для визначення послідовностей та станів, особливо коли існує природний прогрес через ці стани. Це пов’язано з тим, що кожну константу у списку можна відформатувати та порівняти, використовуючи її назву або значення. Перелік може також використовуватися для визначення обмеженого набору дійсних значень.
Одне, що мені здається зручним при використанні, enum
замість того const
, що ви можете перебирати значення в enum
, набагато важче це зробити зі const
значеннями.