Konwersje tablic (Visual Basic)

Typ tablicy można przekonwertować na inny typ tablicy, o ile spełniasz następujące warunki:

  • Równa ranga. Rangi 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

Podczas deklarowania tablicy Object 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 typ bazowy jest nadal Object, a następnie można ustawić go na inną tablicę niepowiązanej klasy. Ponieważ wszystkie klasy pochodzą z Objectklasy , 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 Objectklasy , 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  

Zobacz też