Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете преобразовать тип массива в другой тип массива, если вы соответствуете следующим условиям:
Равный ранг. Ряды двух массивов должны быть одинаковыми, т. е. они должны иметь одинаковое количество измерений. Однако длина соответствующих измерений не должна совпадать.
Тип данных элемента. Типы данных обоих массивов должны быть ссылочными типами. Невозможно преобразовать массив в
Integer
, массивLong
или даже массивObject
, так как в процессе задействован хотя бы один тип значения. Дополнительные сведения см. в разделе "Типы значений" и "Ссылочные типы".Конвертируемость. Преобразование( расширение или сужение) должно быть возможным между типами элементов двух массивов. Пример, который не соответствует этому требованию, является попыткой преобразования между
String
массивом и массивом класса, производным от System.Attribute. Эти два типа не имеют ничего общего, и никакого преобразования между ними не существует.
Преобразование одного типа массива в другой — расширение или сужение в зависимости от того, расширяется ли преобразование соответствующих элементов или сужается. Дополнительные сведения см. в разделе "Расширение и сужение преобразований".
Преобразование в массив объектов
При объявлении массива Object
без инициализации тип его элемента — Object
, пока он не будет инициализирован. Когда вы задаете массив определенного класса, он приобретает тип этого класса. Однако его базовый тип по-прежнему является Object
, и впоследствии его можно задать для другого массива несвязанного класса. Так как все классы производны от Object
, можно изменить тип элемента массива с любого класса на любой другой класс.
В следующем примере не существует преобразования между типами student
и String
, но оба они являются производными от Object
, поэтому все назначения допустимы.
' Assume student has already been defined as a class.
Dim testArray() As Object
' testArray is still an Object array at this point.
Dim names() As String = New String(3) {"Name0", "Name1", "Name2", "Name3"}
testArray = New student(3) {}
' testArray is now of type student().
testArray = names
' testArray is now a String array.
Базовый тип массива
Если вы первоначально объявляете массив с определенным классом, его базовый тип элемента — это этот класс. Если вы впоследствии установите его на массив другого класса, должно быть преобразование между двумя классами.
В следующем примере students
— это student
массив. Так как преобразование между String
и student
не существует, последняя инструкция завершается неудачей.
Dim students() As student
Dim names() As String = New String(3) {"Name0", "Name1", "Name2", "Name3"}
students = New Student(3) {}
' The following statement fails at compile time.
students = names