Conversões de matriz (Visual Basic)
Você pode converter o tipo de uma matriz em um tipo diferente, desde que atenda às seguintes condições:
Classificação igual. As classificações das duas matrizes devem ser as mesmas, ou seja, elas devem ter o mesmo número de dimensões. No entanto, os comprimentos das respectivas dimensões não precisam ser os mesmos.
Tipo de dados do elemento. Os tipos de dados dos elementos de ambas as matrizes devem ser tipos de referência. Você não pode converter uma matriz
Integer
em uma matrizLong
ou mesmo em uma matrizObject
, porque pelo menos um tipo de valor está envolvido. Para obter mais informações, consulte Tipos de Valor e Tipos de Referência.Convertibilidade. Uma conversão, ampliando ou restringindo, deve ser possível entre os tipos de elemento das duas matrizes. Um exemplo que falha nesse requisito é uma tentativa de conversão entre uma matriz
String
e uma matriz de uma classe derivada de System.Attribute. Esses dois tipos não têm nada em comum e não existe conversão de nenhum tipo entre eles.
Uma conversão de um tipo de matriz para outro é de ampliação ou de restrição dependendo se a conversão dos respectivos elementos está ampliando ou restringindo. Para obter mais informações, consulte Ampliando e restringindo conversões.
Conversão em uma Matriz de Objetos
Quando você declara uma matriz Object
sem inicializá-la, seu tipo de elemento é Object
desde que ele permaneça não inicializado. Quando você a define como uma matriz de uma classe específica, ela assume o tipo dessa classe. No entanto, seu tipo subjacente ainda é Object
, e você pode defini-la posteriormente como outra matriz de uma classe não relacionada. Como todas as classes derivam de Object
, você pode alterar o tipo de elemento da matriz de qualquer classe para qualquer outra classe.
No exemplo a seguir, não existe nenhuma conversão entre os tipos student
e String
, mas ambos derivam de Object
, portanto, todas as atribuições são válidas.
' 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.
Tipo subjacente de uma matriz
Se você declarar originalmente uma matriz com uma classe específica, seu tipo de elemento subjacente será essa classe. Se posteriormente você defini-lo como uma matriz de outra classe, deve haver uma conversão entre as duas classes.
No exemplo a seguir, students
é uma matriz student
. Como não existe conversão entre String
e student
, a última instrução falha.
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