Rozšíření a zúžení převodů (Visual Basic)
Důležitým aspektem při převodu typu je, zda výsledek převodu je v rozsahu určení datového typu.
A rozšiřující změní hodnotu na datový typ, který můžete povolit pro libovolné možná hodnota původní data.Rozšiřování převody zachování hodnoty zdroj, ale můžete změnit jeho znázornění.To nastane v případě převodu z integrálního typu na Decimal, nebo z Char na String.
A zužující převody změní hodnotu na datový typ, který nemusí být schopna uchovat některé z možných hodnot.Například se zaokrouhlí desetinnou hodnotu při převodu integrálního typu a číselný typ převáděných do Boolean na buď True nebo False.
Rozšiřující převody
Následující tabulka zobrazuje standardní rozšiřování převody.
Typ dat |
Rozšiřuje na datové typy 1 |
SByte, Short, Integer, Long, Decimal, Single, Double |
|
Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double |
|
Short, Integer, Long, Decimal, Single, Double |
|
UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double |
|
Integer, Long, Decimal, Single, Double2 |
|
UInteger, Long, ULong, Decimal, Single, Double2 |
|
Long, Decimal, Single, Double2 |
|
ULong, Decimal, Single, Double2 |
|
Decimal, Single, Double2 |
|
Single, Double |
|
Double |
|
Žádné Výčtový typ (výčtu) |
Jeho základní typ nedílnou a jakéhokoli typu, které rozšiřuje základní typ. |
Char, String |
|
Charmatice |
Charpole,String |
Jakýkoliv typ |
|
Jakékoli odvozeného typu. |
Všechny základní typ, ze kterého je odvozen 3. |
Jakýkoliv typ |
Rozhraní, které implementuje. |
Typ dat nebo typ objektu. |
1 Podle definice každý typ dat rozšiřuje sám na sebe.
2 Převody z Integer, UInteger, Long, ULong, nebo Decimal na Single nebo Double může způsobit ztrátu přesnosti, ale nikdy ke ztrátě velikosti.V tomto smyslu není k utrpět ztrátu informací.
3 Může zdát překvapivé, že je převod z odvozeného typu na jeden z jeho základních typů rozšiřování.Odůvodnění je, že odvozený typ obsahuje členy základní typ, takže se kvalifikuje jako základní typ instance.V opačném směru základní typ neobsahuje žádné nové členy definované odvozeného typu.
Rozšiřování převody proběhnout úspěšně v době běhu a nikdy utrpět ztrátu dat.Je implicitně vždy provést, ať už Option Strict – příkaz nastaví typ kontroly přepnout do On nebo Off.
Zužující převody
Následující standardní zužujícího převodu:
Tabulka reverzní směrech rozšiřujícího převodu v předchozím (s výjimkou, že každý typ rozšiřuje sám na sebe)
Převody v obou směrech mezi Boolean a libovolný číselný typ
Převody z libovolného číselného typu žádné Výčtový typ (Enum)
Převody v obou směrech mezi řetězec a libovolný číselný typ Boolean, nebo datum
Převod z datového typu nebo objektu zadejte typ odvozený z ní
Zužujícího převodu není vždy úspěšné v době běhu a může selhání nebo utrpět ztrátu dat.Pokud cílový datový typ nemůže přijímat hodnoty převodu dojde k chybě.Například číselný převod může způsobit přetečení.Kompilátor neumožňuje provádět zužujícího převodu implicitně Option Strict – příkaz nastaví typ kontroly přepnout do Off.
[!POZNÁMKA]
Chyba zúžení převodu je potlačena pro převody z prvků For Each…Next kolekci řídicí proměnná smyčky.Další informace a příklady naleznete v části "Zužující převody" v For Each...Next – příkaz (Visual Basic).
Použití zužující převody
Pokud víte, že zdrojová hodnota lze převést na typ cílového data bez chyb nebo ztrátě dat použijete zužujícího převodu.Pokud máte například String , že znáte obsahuje "True" nebo "False", můžete použít CBool klíčové slovo převést na Boolean.
Výjimky při převodu
Rozšiřování převody vždy úspěšné, a proto nejsou jejich vyvoláním výjimky.Zužujícího převodu při selhání, nejčastěji vyvolávají následující výjimky:
InvalidCastException– Pokud je definován žádný převod mezi dvěma typy
OverflowException– (pouze typy integrál) Pokud převedená hodnota je příliš velká pro typ cíle
Pokud definuje třídy nebo struktury CType – funkce (Visual Basic) sloužit jako operátor převodu z této třídy nebo struktury, nebo který CType lze vyvolat jakékoli výjimky, které považuje za vhodné.Navíc, CType mohou volat Visual Basic funkce nebo .NET Framework metod, které zase může vyvolat různé výjimky.
Změny během převody typu odkazu
Převod z Typ odkazu zkopíruje pouze ukazatel na hodnotu.Vlastní hodnota nebudou zkopírovány ani jiným způsobem změněna.Jediná věc, která může změnit je datový typ proměnné podržíte ukazatel myši.V následujícím příkladu typ dat je převeden z odvozené třídy na základní třída, ale je objekt, který obě proměnné nyní přejděte beze změny.
' Assume class cSquare inherits from class cShape.
Dim shape As cShape
Dim square As cSquare = New cSquare
' The following statement performs a widening
' conversion from a derived class to its base class.
shape = square
Viz také
Úkoly
Postupy: Převedení objektu na jiný typ v jazyce Visual Basic
Referenční dokumentace
Souhrn datových typů (Visual Basic)
Funkce pro převod typů (Visual Basic)
Koncepty
Datové typy v jazyce Visual Basic
Implicitní a explicitní převody (Visual Basic)
Převody mezi řetězci a ostatními typy (Visual Basic)