Kézikönyv c #, típuskonverzió

A programozás során gyakran változók értéke azonos típusú változóba másik típusú. Például, a következő részletben int típusú egész szám kódérték van rendelve egy lebegőpontos típusa float:

Ha az egyik művelet hozzárendelési mix kompatibilis adattípusok, az érték a jobb oldali a értékadó operátor automatikusan átalakítjuk a típusát a bal oldali. Ezért, a fenti kódot fragmens, a változó értéke i először alakítjuk úszós, majd rendelt változó F. De mivel az erős gépelés nem minden adattípusok C # teljesen kompatibilisek, ezért nem minden típusú átalakítások engedélyezettek hallgatólagosan. Például, BOOL típusú és int inkompatibilis. Megjegyezzük azonban, hogy a nem kompatibilis típusokat is elvégezhetjük öntéssel. Vet, lényegében tiszta az átalakulással.

Automatikus konverzió típusa

Amikor az azonos típusú adatok vannak rendelve egy másik típusú változó, egy implicit típusú átalakítás történik automatikusan a következő körülmények között:

  • Mindkét típusú kompatibilis
  • egy sor számábrázolás a cél típusú szélesebb, mint az eredeti típus

Ha mindkét feltétel teljesül, akkor van egy szélesedő átalakítás. Például, int, hogy elég nagy az összes érvényes értékei típus byte, és emellett mindkét, int, és byte, integer típusú kompatibilis, így számukra ez lehetséges implicit konverzió.

Numerikus típusok, mind egész és lebegőpontos teljesen kompatibilisek egymással elvégzésére terjed átalakít. Vegyük ezt a példát:

Megjegyezzük, hogy a Sum () metódus két paramétert elvárja int típusú átvételét. Azonban a Main () metódus valójában eltelt két típusú változók rövid. Bár ez úgy tűnik a típus hibás, akkor a program összeállításához és futtatásához hiba nélkül, és visszatér az eredmény, mint az várható volt, az értéke 25.

Ennek az az oka, hogy a fordító fog ez a kód szintaktikailag helyes, annak a ténynek köszönhető, hogy adatvesztés is előfordulhat. Mivel a maximális értéket (32767), amely tartalmazhat egy típusú rövid, jól tartományon belül int típusú keret (ami a maximális értéke 2147483647), a fordító implicit módon meghosszabbítja mindegyik változó típus rövid, hogy írja int. Technikailag a „expanzió” jelöli, az implicit uplink működtetés (emelkedő öntött), amely nem eredményez adatvesztést.

Hoz összeegyeztethetetlen típusok

Annak ellenére, hogy a hasznosságát implicit típusátalakítások, nem tudnak megfelelni az igényeinek a programozás, mert lehetővé teszi csak szélesedő konverziót kompatibilis típusokat. De minden más esetben meg kell alkalmazni a szereposztás. Hoz - a fordító parancs átalakítani az eredmény a kifejezés a megadott típus. De ez a kifejezett, típusátalakítások. Az alábbiakban egy általános formája a szereplők:

Itt tselevoy_tip jelöli a típus, amely kívánatos lehet átalakítani a megadott kifejezést.

Ha casting vezet szűkítő konverzió. része az információ is elveszhet. Például úgy, hogy a vezetés long int típusonként az információ elvész, ha hosszú típus értéke nagyobb, mint a számok a tartományban a int típusú, mert legjelentősebb bit a számértékek dobni. Amikor a lebegőpontos értéket alakítunk egy egész szám, az eredmény elvész csonkolása törtrészének a számérték. Így, ha a hozzárendelt érték 1,23 egész szám változó, az eredmény akkor csak egész részét a forrás (1), és a tört része (0,23) elvész. Nézzünk egy példát:

Ennek eredménye az a program lesz:

Megjegyezzük, hogy a változó i1 helyesen alakítjuk írja rövid, mert értéke a tartományban az adatok típusát. Konvertálása variábilis DEC egy int visszatért az egész részét ez a szám. Átalakítás változó i2 visszatért túlfolyó értéke 18.964 (azaz 84500-32768 * 2).

Lehallgatás szűkül adattranszformációk

Az előző példában, a működtetés a változó i2 a rövid típus nem elfogadható, mivel a van adatvesztés. Ahhoz, hogy hozzon létre alkalmazásokat, amelyben az adatvesztés elfogadhatatlannak, C # kulcsszavakat, például ellenőrzött és ellenőrizetlen. annak elősegítése, hogy az adatvesztés nem fog észrevétlenül.

Alapértelmezésben, ha nem hoz megfelelő korrekciós intézkedéseket, a túlcsordulás (overflow) és alsó (alsó) akkor hiba nélkül. Feldolgozási körülmények túlcsordulás és alulcsordulás az alkalmazás kétféleképpen. Ez megtehető kézzel, támaszkodva a programozási ismeretek és készségek.

A hátránya ennek a módszernek, hogy még ha a legjobb igyekezet az ember még egy ember, és néhány hiba csúszhat el a szemét.

Szerencsére a C # biztosít a kulcsszó jelölve. Ha az üzemeltető (vagy üzemeltetők blokk) van összefüggésben készült jelölve, C # fordító generál CIL-kiegészítő utasítások, amelyek egy csekket túlcsordulás feltételek, amelyek felmerülhetnek eredményeként összeadás, szorzás, kivonás, vagy szétválása két numerikus adattípusok.

Abban az esetben, egy túlcsordulás futásidőben fog dobni egy kivételt System.OverflowException. Nézzünk egy példát, ahol átadjuk a konzolra, kivéve az értéket:

Az eredmény ez a program:

Kézikönyv c #, típuskonverzió

Konfigurálása ellenőrzi az esemény túlcsordulás feltételek a projekt hatóköre

Ha létrehoz egy alkalmazást, amely a túlfolyó soha nem veszik észre, akkor előfordulhat, hogy oldalról a kulcsszó ellenőrzött számlák idegesítően sok sornyi kódot. Ilyen esetben, alternatívájaként a fordító C # támogatja zászló / ellenőrizve. Amikor aktiválódik lehetséges túlcsordulás jelét automatikusan lehet az összes meglévő kódot aritmetikai műveletek használata nélkül mindegyik kulcsszó ellenőrzik. Túlcsordulás Detection ugyanúgy generálásához vezet a megfelelő kivétel a futás során.

Kézikönyv c #, típuskonverzió

Fontos megjegyezni, hogy a C # biztosít a kulcsszó bejelölve. amely lehetővé teszi, hogy letiltsa a kibocsátás kapcsolódó túlfolyó kivételek egyedi esetekben.

Tehát, összefoglalni alkalmazásra C # kulcsszavak ellenőrzött és ellenőrizetlen, meg kell jegyezni, hogy az alapértelmezett túlcsordulás a .NET runtime figyelmen kívül hagyja. Ha azt szeretnénk, hogy kezelje az egyes szereplők, akkor kell használni kulcsszó ellenőrzött Csak, de ha azt szeretnénk, hogy az összes fogást kapcsolatos hibák a túlcsordulás az alkalmazás, akkor kell aktiválni a zászló / ellenőrzik. Ami a kulcsszó bejelölve, akkor lehet használni jelenlétében egy kód blokk, ahol a túlfolyó megengedett (és ezért nem kivételt, futás közben).

A szerepe az osztály System.Convert

Végén a téma adatok típuskonverziójára érdemes megjegyezni, hogy a System névtér elérhető Convert osztály. amely szintén használható a tágulását és összehúzódását adatok:

Az egyik előnye, hogy a megközelítés System.Convert osztály annak a ténynek köszönhető, hogy lehetővé teszi, hogy végre konverziót között adattípusok a nyelvi szempontból semleges módon (például egy öntött Visual Basic szintaxis teljesen eltér a javasolt erre a célra a C #). Ugyanakkor, mivel a C # nincs kifejezett átváltási művelet osztály használatra Convert adattípus konverzió általában ízlés kérdése. )

Kapcsolódó cikkek