Mietin pitkään mitä hittoa tuo unboxing meinaa. Jotain epänyrkkeilyä...nyt oli AIVAN PAKKO kattoa lopulta, että mitä hittoa. AAARRHGHGHGHGHG!!1111
Nyrkkeily ja Unboxing on keskeinen käsite C # s-tyyppinen järjestelmä. Kanssa Nyrkkeily ja Unboxing voi yhteys arvo-tyyppiä ja viite-tyypin sallimalla jokin arvo arvo-tyyppiä muutetaan ja tyypin objekti. Nyrkkeily ja Unboxing mahdollistaa yhtenäisen kuvan tyypin järjestelmän Siellä arvo tahansa voi viime kädessä pidettävä esine.
Converting arvon tyyppi on viittaus tyyppiä kutsutaan Boxing.Unboxing on selkeä toimintaa.
C # tarjoaa yhtenäisen tyyppinen järjestelmä. Kaikki typesincluding arvo typesderive alkaen tyypin objekti. On mahdollista soittaa vastustaa menetelmiä mitään arvoa, vaikka arvot alkukantaiset tyypit, kuten Int.
Esimerkki
using System;
class Test
(
static void main () (
Console.WriteLine (3.ToString ());
)
)
pyytää tavoitteena määritellyt toString menetelmä kokonaisluku kirjaimellisesti.
Esimerkki
class Test
(
static void main () (
int i = 1;
objekti O = I / nyrkkeily
int j = (int) O, / / Unboxing
)
)
Int arvo voidaan muuntaa kohteen ja takaisin Int.
Tämä esimerkki osoittaa, että nyrkkeily ja Unboxing. Kun muuttuja arvon tyyppi on muunnettava viittauksen tyypin, kohteen valinta on myönnetty pitää arvosta, ja arvo kopioidaan ruutuun.
Unboxing on juuri päinvastainen. Kun kohteen valinta on heitetty takaisin sen alkuperäisen arvon tyyppi, arvo on kopioitu ulos laatikosta ja asianmukaisiin tallennuspaikka.
Lyövä tuloksia
Nyrkkeily muuttaminen sallitaan kaikki arvo-tyyppiä epäsuorasti muunnetaan tyypin vastustaa tai jollekin käyttöliittymä-tyyppiä toteutetaan arvo-tyyppiä. Nyrkkeily arvo arvo-tyyppi koostuu jakaa kohteen esimerkiksi ja kopiointi arvo-tyypin arvo huomioon, että esimerkiksi.
Esimerkiksi kaikki arvo-tyyppiin G, nyrkkeily luokka olisi ilmoitettava seuraavasti:
luokan vbox
(
G-arvo;
G_Box (G g) (
arvo = g;
)
)
Nyrkkeily on arvo V tyypin G koostuu nyt suorittamaan ilmaisun uusi G_Box (v), ja palauttaa tuloksena oikeusasteen arvon tyypin objekti.
Siten, lausumat
int i = 12;
esinettä box = i;
käsitteellisesti vastaa
int i = 12;
esinettä box = uusi int_Box (i);
Nyrkkeily luokkiin kuten G_Box ja int_Box edellä dont todella olemassa ja dynaaminen tyyppi boxed arvo isnt todella luokan tyyppi. Sen sijaan, boxed arvon tyyppi G on dynaaminen tyyppi G, ja dynaaminen tyyppi-tarkastus on toimija voi vain viitataan tyyppi G. Esimerkiksi
int i = 12;
esinettä box = i;
if (valinta on int) (
Console.Write ( "laatikko sisältää int");
)
tulee lähtö merkkijono Box sisältää int konsoli.
Nyrkkeily muuttaminen edellyttää tehdä kopion arvo on boxed. Tämä eroaa uusiin viite-konetyypistä objekti, jonka arvo on edelleen viittaus samaan esimerkiksi yksinkertaisesti pidetään vähemmän niistä tyypin objekti.
Esimerkiksi, kun ilmoitus
struct Point
(
public int x, y;
julkisen Point (int x, int y) (
this.x = x;
this.y = y;
)
)
seuraavista
Kohta p = new Point (10, 10);
esinettä box = p;
p.x = 20;
Console.Write (((kohta) laatikko). X);
on tuotannon arvo 10 konsolin, koska epäsuora Boxing toimintaa, jota esiintyy jakamisesta p kohtaan aiheuttaa arvo P voidaan kopioida. Oli kohta sen sijaan on julistettu luokan, arvo 20 olisi lähtö koska p ja laatikko viittaisi samaan tapauksessa.
Unboxing tuloksia
Unboxing muuntaminen sallii nimenomaisesti muuntamisen tyypistä vastustaa arvo-tyypin tai mistä tahansa liitäntä-tyyppi on jokin arvo-tyypin toteuttaa liitäntä-tyyppi. Unboxing toiminta koostuu ensimmäinen tarkistaa, että kohde esimerkiksi on boxed arvo annetaan arvo-tyyppi, ja kopioimalla arvo pois oikeusasteessa. Unboxing muuntaminen objektin ruudun arvo-tyypin G koostuu täytäntöönpanosta ilmaisu ((G_Box) kohta). arvo.
Siten, lausumat kohteen laatikko = 12;
int i = (int) kohta;
käsitteellisesti vastaa
esinettä box = uusi int_Box (12);
int i = ((int_Box) kohta). arvo;
Jotta Unboxing muunnetaan annettu arvo-tyypin onnistua run-time, arvo lähteen väite on viittauksen kohde, joka luotiin aiemmin nyrkkeily arvo, että arvo-tyyppiä. Jos lähde argumentti on nolla tai viittaus ristiriidassa objekti InvalidCastException on heitetty.
PÄÄTELMÄT:
Tämäntyyppinen järjestelmä yhdistyminen tarjoaa vastinetta tyyppien kanssa hyötyä objekti-ness aiheuttamatta tarpeettomia kustannuksia.
Ohjelmille, dont kaivata int arvot toimia esineet, int arvot ovat vain 32-bittisiä arvoja. Ohjelmille, jotka on int-arvoja käyttäytyä kuten esineitä, tämä kyky on saatavilla pyynnöstä. Tämä kyky käsitellä arvo tyyppejä objekteina siltojen välinen ero arvon tyypin ja viite tyypit, että on olemassa useimmilla kielillä.