Diferència entre la boxa i la desconnexió a C #
Content
A C #, tots els tipus de valor es deriven de l'objecte classe. Per tant, una variable de referència d'un objecte tipus pot fer referència a qualsevol altre tipus de valor. C # introdueix dos mètodes a Boxa i Unboxing, que enllaça el tipus de valor al tipus de referència. La diferència bàsica entre Boxing i Unboxing és que Boxing és la conversió del tipus de valor a un tipus d'objecte, mentre que, per altra banda, el terme Unboxing fa referència a la conversió del tipus d'objecte al tipus de valor. Estudiem les altres diferències entre la boxa i la bústia de caixa.
- Gràfic de comparació
- Definició
- Diferències claus
- Conclusió
Gràfic de comparació
Bases per a la comparació | Boxa | Unboxing |
---|---|---|
Bàsic | El tipus d'objecte fa referència al tipus de valor. | procés per recuperar valor de l’objecte en caixa. |
Emmagatzematge | El valor emmagatzemat a la pila es copia a l'objecte emmagatzemat a la memòria acumulada. | El valor dels objectes emmagatzemats a la memòria heap es copia en el tipus de valor emmagatzemat a la pila. |
Conversió | Conversió implícita. | Conversió explícita. |
Exemple | int n = 24; objecte ob = n; | int m = (int) ob; |
Definició de boxa
La boxa és un procediment per convertir un tipus de valor a un tipus d'objecte. Aquí, el tipus de valor s'emmagatzema a la pila i el tipus d'objecte s'emmagatzema a la memòria de pila. Aquesta conversió del tipus de valor al tipus d'objecte és una conversió implícita. Podeu assignar directament un valor a un objecte, i C # gestionarà la conversió de resta. Entenem la boxa amb un exemple.
int i = 24; objecte ob = i; // Caixa del tipus enter n al tipus d'objecte ob. o objecte ob1 = 21; // aquí també un tipus d'objecte ob1 fa referència a un tipus enter
Al codi anterior, el tipus enter que conté el valor 24 es guarda a la pila i es copia al tipus d'objecte ob. Un tipus d'objecte fa referència a un valor enter. Ara, "int i" també conté el valor 24 i el "tipus d'objecte ob" també contenen el valor 24, però tots dos són independents els uns dels altres, és a dir, si canvieu el valor de i, no reflectirà el canvi en el valor d'ob.
La boxa consumeix més memòria i temps addicional. El motiu és que un nou objecte, que farà referència al tipus de valor, ha d’assignar l’espai de memòria al grup. A continuació, el valor del tipus de valor que s’emmagatzema a la pila es transferirà a ob tipus d’objecte, a la ubicació de memòria heap.
Definició de Unboxing
La inversa de Boxa és Unboxing. El desallotjament és una conversió del tipus d'objecte al tipus de valor. A Unboxing, el valor del tipus d'objectes en caixa emmagatzemat al grup és transferit al tipus de valor que s'emmagatzema a la pila. A diferència de la boxa, el desplegament s'ha de fer explícitament. El tipus d'objecte s'expressa explícitament al tipus de valor i el tipus de valor ha de ser el mateix que el tipus al qual es fa referència. Entenem el exemple del desallotjament amb un exemple.
int i = 24; objecte ob = i; // Caixa del tipus enter n al tipus d'objecte ob. int j = (int) ob; // Desmarqueu el valor enter que s’emmagatzema en el tipus d’objecte ob al tipus enter y.
El valor emmagatzemat a l'objecte ob es recupera enviant-lo al tipus que l'objecte feia referència a és a dir, tipus enter "j".
El desembalatge també consumeix més memòria i més temps. Ja que, quan un tipus d'objecte s'ha de desembossar, el valor del tipus d'objecte emmagatzemat al munt ha de ser transferit al nou tipus de valor emmagatzemat a la pila. El tipus d'objecte el valor recuperat estarà disponible per a la recollida d'escombraries.
- A la boxa, un objecte es fa referència com a tipus de valor. D'altra banda, el procés de recuperació del valor de l'objecte en caixa es denomina caixa de caixa.
- Un tipus de valor emmagatzemat en una pila es copia a l'objecte emmagatzemat a la memòria acumulada. D'altra banda, a la unboxing, un objecte emmagatzemat a la memòria acumulada es copia en un tipus de valor emmagatzemat a la memòria de pila.
- La boxa és una conversió implícita, mentre que, el bobox és una conversió explícita.
Conclusió:
Tant la boxa com la bústia de consum consumeixen més temps i memòria, i són costosos computacionalment. També manquen de seguretat de tipus i augmenten el temps d'execució de la despesa general. Sempre s’aconsella evitar l’ús excessiu de la boxa i la bústia de caixa al programa.