C# - konverze datových typů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí
Typy konverzí Implicitní: Nedochází ke změně hodnoty, protože proměnná je konvertována na typ s větším rozsahem Automatické (není nutné „informovat“ kompilátor o jejich provedení) Př.: int i = 10; long l = i; Explicitní: Hodnota je převáděna na typ s menším rozsahem Nutné použít operátor přetypování (kompilátor musí „vědět“, že dojde k přetypování) Př.:i = (int) l;
Implicitní datové konverze Toto jsou podporované implicitní datové konverze v C#:
Explicitní datové konverze - typy Microsoft.NET poskytuje tři způsoby datových konverzí Parsing Třídu Convert Explicitní cast operátor ()
Parsing
Class Convert
cast operátor ()
Explicitní číselné konverze Pokud se konvertovaná hodnota nevejde rozsahem do cílové proměnné dojde ke změně její hodnoty Nová hodnota nabude velikosti zbytku z velikosti rozsahu cílové proměnné, nebo do velikosti násobků tohoto rozsahu Př.: public class ExplicitNumberReTyping { public static void Retype() { int intValue = 300; //po pretypovani je hodnota 44 ( (pocet hodnot rozsahu typu byte)) byte byteValue = (byte)intValue; Console.WriteLine("Nova hodnota : {0}", byteValue); } }
Kontrolované číselné konverze Kontrolovat korektnost převodů je možné pomocí klíčového slova CHECKED V případě, že cílový typ nevyhovuje rozsahem přetypovávané hodnotě dojde k vyvolání výjimky System.OverflowException Vyjímku je možné ošetřit konstrukcí sekce try - catch
Kontrolovaná číselná konverze příklad public static void CheckedRetypeWithCatch() { try { checked { int intvalue = 300; byte byteValue = (byte) intValue; } } catch(System.OverflowException) { //zpracovani preteceni Console.WriteLine("Pri konverzi doslo k preteceni ciloveho rozsahu"); } }
Použití klíčového slova CHECKED jako operátoru Pokud je klíčové slovo použito jako operátor je při jeho použití v případě přetečení opět vyvolána vyjímka System.OverflowException Opakem je klíčové slovo unchecked – slouží pro označení nekontrolované konverze Př.: public static void CheckedOperatorRetype() { int intHodnota = 355; byte byteHodnota = checked ((byte)intHodnota); }
Třída System.Convert Třída která obsahuje sadu metod pro konverze datových typů Lze provádět i konverze nesourodých datových typů (např. string na číslo a naopak) Všechny konverze provedené pomocí této třídy jsou kontrolované a proto je v případě chyby vyvolána výjimka Př.: //prevod retezce na ciselnou hodnotu public static void FromStringToInt32() { string stringValue = „369"; int intValue = System.Convert.ToInt32(stringValue); Console.WriteLine(intValue); }
Úkoly a cvičení Vytvořte 4 jednoduché aplikace na: Demonstraci implicitní konverze Demonstraci přetypování pomocí parsingu Demonstraci přetypování pomocí třídy Convert Demonstraci přetypování pomocí cast operátoru () Řešení naleznete v ukázkových příkladech ImplicitConversions Parsing ClassConvert CastOperator_conversion
14 Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí Použité materiály: Kniha: Programujeme profesionálně, nakladatelství WROX, autor: Jay Glynn,… Seriály o programování v jazyce C# :