Konwersje tablic (Visual Basic)
Typ tablicy można przekonwertować na inny typ tablicy, o ile spełniasz następujące warunki:
Równa ranga. Klasyfikacje dwóch tablic muszą być takie same, czyli muszą mieć taką samą liczbę wymiarów. Jednak długość odpowiednich wymiarów nie musi być taka sama.
Typ danych elementu. Typy danych elementów obu tablic muszą być typami referencyjnymi. Nie można przekonwertować
Integer
tablicy na tablicęLong
, a nawet na tablicęObject
, ponieważ jest zaangażowany co najmniej jeden typ wartości. Aby uzyskać więcej informacji, zobacz Typy wartości i typy referencyjne.Możliwość konwersji. Konwersja, rozszerzająca lub zawężająca, musi być możliwa między typami elementów dwóch tablic. Przykładem niepowodzenia tego wymagania jest próba konwersji między tablicą
String
a tablicą klasy pochodzącej z System.Attributeklasy . Te dwa typy nie mają nic wspólnego, a żadna konwersja między nimi nie istnieje.
Konwersja jednego typu tablicy na inny jest rozszerzana lub zawężana w zależności od tego, czy konwersja odpowiednich elementów jest rozszerzająca, czy zawężająca. Aby uzyskać więcej informacji, zobacz Rozszerzanie i zawężanie konwersji.
Konwersja na tablicę obiektów
W przypadku deklarowania Object
tablicy bez inicjowania jej typ elementu jest Object
tak długi, jak długo pozostaje niezainicjowany. Po ustawieniu jej na tablicę określonej klasy przyjmuje typ tej klasy. Jednak jego podstawowy typ jest nadal Object
, a następnie można ustawić go na inną tablicę niepowiązanej klasy. Ponieważ wszystkie klasy pochodzą z Object
klasy , można zmienić typ elementu tablicy z dowolnej klasy na dowolną inną klasę.
W poniższym przykładzie nie istnieje konwersja między typami student
i String
, ale obie pochodzą z Object
klasy , więc wszystkie przypisania są prawidłowe.
' 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.
Podstawowy typ tablicy
Jeśli pierwotnie zadeklarowasz tablicę z określoną klasą, jej podstawowym typem elementu jest ta klasa. Jeśli następnie ustawisz ją na tablicę innej klasy, musi istnieć konwersja między dwiema klasami.
W poniższym przykładzie students
jest tablicą student
. Ponieważ nie istnieje konwersja między String
i student
, ostatnia instrukcja kończy się niepowodzeniem.
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