CHOICE и ENUMERATED используются для разных целей, в отличие от "enum" и "union" в C.
ENUMERATED перечисляет только набор элементов:
MyFruit :: = ENUMERATED{banana (1), apple (2), pear (3)}
CHOICE позволяет выбрать один элемент из списка и определить его атрибуты:
MyCHOICE :: = CHOICE {aINTEGER, b BOOLEAN, c SEQUENCE (SIZE (1..10)) OF MyFruit}
Если вы используете нотацию значений ASN.1 для объявления переменных этих типов, это будет выглядеть так:
aFruit MyFruit :: = банан
aChoice MyCHOICE :: = c: {банан, яблоко, банан, груша}
anotherChoice MyCHOICE :: = a: 10
См.?CHOICE позволяет использовать одно и то же имя типа для хранения разных типов (таким образом, значений).Как и «союз» в C.
Надеюсь, это поможет.