Převody pole (Visual Basic)
Typ pole můžete převést na jiný typ pole za předpokladu, že splňujete následující podmínky:
Rovná se pořadí. Pořadí obou polí musí být stejné, to znamená, že musí mít stejný počet dimenzí. Délky příslušných dimenzí ale nemusí být stejné.
Datový typ elementu Datové typy prvků obou polí musí být odkazovými typy. Pole nelze převést
Integer
naLong
matici nebo dokonce naObject
matici, protože je zapojen alespoň jeden typ hodnoty. Další informace naleznete v tématu Typy hodnot a odkazové typy.Převodnost. Převod, buď rozšiřující, nebo zúžený, musí být možný mezi typy prvků dvou polí. Příkladem selhání tohoto požadavku je pokus o převod mezi
String
polem a polem třídy odvozené z System.Attribute. Tyto dva typy nemají nic společného a mezi nimi neexistuje žádný převod jakéhokoli druhu.
Převod jednoho typu pole na jiný se rozšiřuje nebo zúží v závislosti na tom, zda je převod příslušných prvků rozšiřující nebo zúžený. Další informace naleznete v tématu Rozšíření a zužování převodů.
Převod na pole objektů
Když deklarujete Object
pole bez inicializace, jeho typ prvku je Object
tak dlouho, dokud zůstane neinicializován. Když ji nastavíte na pole konkrétní třídy, převezme typ této třídy. Jeho základní typ je však stále Object
a můžete ho následně nastavit na jiné pole nesouvisející třídy. Vzhledem k tomu, že všechny třídy odvozují Object
, můžete změnit typ prvku pole z libovolné třídy na jakoukoli jinou třídu.
V následujícím příkladu neexistuje žádný převod mezi typy student
a String
, ale oba odvozeny z Object
, takže všechna přiřazení jsou platná.
' 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.
Základní typ pole
Pokud jste původně deklarovali pole s určitou třídou, jeho základní typ elementu je tato třída. Pokud ho následně nastavíte na pole jiné třídy, musí existovat převod mezi těmito dvěma třídami.
V následujícím příkladu students
je student
pole. Vzhledem k tomu, že mezi String
a student
neexistuje žádný převod, poslední příkaz selže.
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