#vb6
#vb6
Вопрос:
Я определяю перечисление, которое в конечном итоге может использоваться как индекс массива, подобный этому…
Public Enum MY_ENUM
THIS_ENUM_VALUE = 1
THAT_ENUM_VALUE
THE_OTHER_ENUM_VALUE
MAXIMUM_ENUM_VALUE = THE_OTHER_ENUM_VALUE
End Enum
Теория заключается в том, что любой, добавляющий другое перечисление, исправит максимальное значение перечисления и любой массив, определенный как
Dim my_array(MAXIMUM_ENUM_VALUE) As Integer
будут увеличены по мере необходимости.
Мой вопрос: должен ли я это делать, и если нет, что бы вы предложили?
Комментарии:
1. Похоже, вы храните разные данные в разных столбцах 2D-массива? Возможно, вместо этого вам следует использовать структуры (
Type
) или объекты (Class
)?2. @MarkJ, спасибо за совет, но я просто использую эти перечисления в качестве индексов массива; Я бы сказал, что
myarray(FRONT)
иmyarray(BACK)
, например, предпочтительнее, чемmyarray(1)
иmyarray(2)
.3. В таком случае почему бы и нет
myarray(LBound(myarray))
иmyarray(UBound(myarray))
? Я все еще не понимаю необходимости перечислений — конечно, это мог быть я
Ответ №1:
Обратите внимание, что в VB6 также довольно типично использовать «скрытые значения перечисления», подобные этому:
Public Enum MY_ENUM
THIS_ENUM_VALUE = 1
THAT_ENUM_VALUE
THE_OTHER_ENUM_VALUE
[_first] = THIS_ENUM_VALUE
[_last] = THE_OTHER_ENUM_VALUE
End Enum
Вы могли бы объединить это с другими предложениями:
Public Enum MY_ENUM
[_first]
THIS_ENUM_VALUE
THAT_ENUM_VALUE
THE_OTHER_ENUM_VALUE
[_last]
End Enum
Dim MyArray(MY_ENUM.[_first] To MY_ENUM.[_last]) As MY_ENUM
Ответ №2:
Я думаю, что это правильный путь. Если вы поступите так, как вы описали, перечисление может быть расширено без нарушения кода.
Единственное, что я вижу, что нужно сделать, это сообщить другим, которые используют ваш код для объявления массивов на основе перечисления, чтобы они использовали MAXIMUM_ENUM_VALUE
вместо добавленного ими значения enum (в данном случае, THE_OTHER_ENUM_VALUE
).
Ответ №3:
Практика заключается в том, что мы используем объявление типа
Public Enum MY_ENUM
THIS_ENUM_VALUE = 1
THAT_ENUM_VALUE
THE_OTHER_ENUM_VALUE
MAXIMUM_ENUM_VALUE
End Enum
и вам даже не нужно редактировать последнее объявление 🙂 Уверен, что ваши массивы на один элемент длиннее, чем необходимо, но, ИМХО, это не большая проблема.