Оператор ReDim (Visual Basic)

Обновлен: Ноябрь 2007

Перераспределяет область памяти для хранения переменной массива.

ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]

Компоненты

  • Preserve
    Дополнительный. Данный модификатор используется для хранения данных существующего массива при изменении размера только последней размерности массива.

  • name
    Обязательный. Имя переменной массива. См. раздел Имена объявленных элементов.

  • boundlist
    Обязательный. Список границ каждой размерности переопределенного массива.

Заметки

Можно использовать оператор ReDim, чтобы изменить размер одной или нескольких уже объявленных размерностей массива. Если некоторые элементы большого массива больше не требуются, оператор ReDim может освободить память, уменьшив размер массива. С другой стороны, если код определяет, что массиву требуется несколько дополнительных элементов, можно добавить их с помощью оператора ReDim.

Оператор ReDim предназначен только для массивов. Он не является допустимым для скалярных величин (переменных, содержащих только одно значение), коллекций или структур. Обратите внимание, что если объявить переменную типа Array, оператор ReDim не будет иметь достаточной информации о типе для создания нового массива.

Оператор ReDim может быть использован только на уровне процедуры. Это означает, что контекст объявления для переменной должен быть процедурой и не может быть исходным файлом, пространством имен, интерфейсом, классом, структурой, модулем или блоком. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию.

Правила

  • Модификаторы. Можно задать только модификатор Preserve; при этом нельзя пропускать ключевое слово ReDim.

  • Несколько переменных. Можно изменить размер нескольких переменных массива в одном операторе объявления, задав компоненты name и boundlist для каждого из них. Несколько переменных разделяются запятыми.

  • Границы массива. Каждая запись в boundlist может задавать нижнюю и верхнюю границу этого измерения. Нижняя граница всегда равна нулю, независимо от того, определена она или нет. Верхней границей является наибольшее возможное значение для этого индекса, но не длина размерности (которая равна значению верхней границы плюс один). Каждый нижний индекс может изменяться от нуля до значения верхней границы.

    Число размерностей в списке boundlist должно соответствовать исходному рангу массива.

  • Пустые массивы. Для объявления верхней границы размерности массива можно использовать число -1. Это обозначает, что массив является пустым, но не Nothing (Visual Basic). Дополнительные сведения см. в разделе Практическое руководство. Создание массива без элементов. Однако в Visual Basic отсутствует возможность успешного доступа к таким массивам. При попытке обратиться к такому массиву во время выполнения возникает ошибка IndexOutOfRangeException.

  • Типы данных. Оператор ReDim не может изменить тип данных переменной массива или его элементов.

  • Инициализация. Оператор ReDim не может предоставить новые значения инициализации для элементов массива.

  • Ранг Оператор ReDim не может изменять ранг (число измерений) массива.

  • Изменение размера с помощью ключевого слова Preserve. Используя ключевое слово Preserve, можно изменить размер только последней размерности массива. Для всех остальных размерностей необходимо задать те же значения границ, которые они имели в существующем массиве.

    Например, в одномерных массивах можно изменить размер размерности и сохранить все содержимое массива, поскольку изменяется только одна размерность. Однако если массив имеет две или несколько размерностей, то с помощью ключевого слова Preserve можно изменить только размер последней размерности массива.

  • Свойства. Оператор ReDim можно использовать для свойств массива значений.

Поведение

  • Замена массива. Оператор ReDim освобождает существующий массив и создает новый массив с таким же рангом. Новый массив заменяет существующий массив в переменной массива.

  • Инициализация без ключевого слова Preserve. Если не указано ключевое слово Preserve, оператор ReDim инициализирует элементы нового массива с значениями по умолчанию для их типа данных.

  • Инициализация с помощью ключевого слова Preserve. Если модификатор Preserve указан, значения элементов в Visual Basic копируются из существующего массива в новый.

Пример

В следующем примере производится увеличение размера последней размерности динамического массива без потери существующих данных, затем производится уменьшение размера массива с частичной потерей данных. В нем также уменьшается размер до исходного значения и повторно инициализируются все элементы массива.

Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)

Первый оператор ReDim создает новый массив, который заменяет существующий массив в переменной intArray. Оператор ReDim копирует все элементы из существующего массива в новый массив. В него добавляются 10 новых столбцов в конец каждой строки каждого уровня, а элементы в этих новых столбцах инициализируются как 0. (значение по умолчанию Integer, тип элемента массива).

Второй оператор ReDim создает еще один новый массив и копирует все элементы, которые помещаются в этот массив. Однако в конце каждой строки каждого уровня пропадают пять столбцов. Эти столбцы можно больше не использовать. Уменьшение размера большого массива позволяет освободить память, которая больше не используется.

Третий оператор ReDim создает еще один массив, удаляя еще пять столбцов в конце каждой строки каждого уровня. В этот раз не выполняется копирование никаких элементов. Массив возвращается к исходному размеру, а все его элементы принимают значения по умолчанию.

См. также

Задачи

Практическое руководство. Создание массива без элементов

Основные понятия

Оператор ReDim (для пользователей Visual Basic 6.0)

Объявление размера массива для пользователей Visual Basic 6.0

Ссылки

Оператор Const (Visual Basic)

Оператор Dim (Visual Basic)

Оператор Erase (Visual Basic)

Nothing (Visual Basic)

IndexOutOfRangeException