Raccomandato, 2024

Scelta Del Redattore

Differenza tra boxing e Unboxing in C #

In C #, tutti i tipi di valore sono derivati ​​dall'oggetto classe. Quindi, una variabile di riferimento di tipo oggetto può riferirsi a qualsiasi altro tipo di valore. C # introduce due metodi di Boxing e Unboxing, che collega il tipo di valore al tipo di riferimento. La differenza fondamentale tra Boxing e Unboxing è che Boxing è la conversione del tipo di valore in un tipo di oggetto mentre, in altre mani, il termine Unboxing fa riferimento alla conversione del tipo di oggetto nel tipo di valore. Cerchiamo di studiare le altre differenze tra Boxing e Unboxing.

Grafico comparativo

Base per il confrontoBoxeunboxing
Di baseIl tipo di oggetto si riferisce al tipo di valore.processo di recupero del valore dall'oggetto in scatola.
ConservazioneIl valore memorizzato nello stack viene copiato sull'oggetto archiviato nella memoria heap.Il valore dell'oggetto memorizzato nella memoria heap viene copiato nel tipo di valore memorizzato nello stack.
ConversioneConversione implicitaConversione esplicita
Esempioint n = 24;
oggetto ob = n;
int m = (int) ob;

Definizione di boxe

La boxe è una procedura per convertire un tipo di valore in un tipo di oggetto. Qui, il tipo di valore è memorizzato nello stack e il tipo di oggetto è memorizzato nella memoria heap. Questa conversione del tipo di valore nel tipo di oggetto è una conversione implicita. È possibile assegnare direttamente un valore a un oggetto e C # gestirà la conversione del resto. Comprendiamo la boxe con un esempio.

 int i = 24; oggetto ob = i; // Inserisci il numero intero n nel tipo di oggetto ob. o oggetto ob1 = 21; // anche qui un tipo di oggetto ob1 si riferisce a un tipo intero 

Nel codice precedente, il numero intero i contenente il valore 24 viene memorizzato nello stack e viene copiato nel tipo di oggetto ob. Un tipo di oggetto ora si riferisce a un valore intero. Ora, "int i" contiene anche il valore 24 e "object type ob" contiene anche il valore 24, ma entrambi i valori sono indipendenti l'uno dall'altro, ovvero se si modifica il valore di i, non rifletterà la modifica nel valore di ob.

La boxe consuma memoria extra e tempi supplementari. Il motivo è che un nuovo oggetto, che si riferirà al tipo di valore, deve allocare lo spazio di memoria sull'heap. Successivamente, il valore del tipo di valore che è memorizzato nello stack verrà trasferito al tipo di oggetto, nella posizione di memoria heap.

Definizione di Unboxing

Il contrario di Boxing è Unboxing. Unboxing è una conversione del tipo di oggetto al tipo di valore. In Unboxing il valore del tipo di oggetto in scatola memorizzato nell'heap viene trasferito al tipo di valore archiviato nello stack. A differenza del Boxing, l'Unboxing deve essere fatto esplicitamente. Il tipo di oggetto viene esplicitamente convertito nel tipo di valore e il tipo di valore deve essere uguale al valore a cui si riferisce il tipo di oggetto. Comprendiamo il concetto di Unboxing con un esempio.

 int i = 24; oggetto ob = i; // Inserisci il numero intero n nel tipo di oggetto ob. int j = (int) ob; // Annulla la condivisione del valore intero memorizzato nel tipo di oggetto ob nel numero intero y. 

Il valore memorizzato nell'oggetto ob viene recuperato convertendolo nel tipo stesso dell'oggetto a cui si riferiva, ad esempio il tipo intero "j".

Unboxing consuma anche più memoria e più tempo. Poiché, quando un tipo di oggetto deve essere rimosso, il valore del tipo di oggetto archiviato nell'heap deve essere trasferito al nuovo tipo di valore memorizzato nello stack. Il tipo di oggetto il cui valore è stato recuperato sarà ora disponibile per la garbage collection.

Differenze chiave tra il pugilato e l'unboxing

  1. Nel pugilato, un oggetto è fatto per riferirsi come un tipo di valore. D'altra parte, il processo di recupero del valore dall'oggetto boxed è chiamato unboxing.
  2. Un tipo di valore memorizzato su una pila viene copiato sull'oggetto archiviato nella memoria heap. D'altra parte, in unboxing, un oggetto archiviato nella memoria heap viene copiato in un tipo di valore memorizzato nella memoria dello stack.
  3. La boxe è una conversione implicita mentre, l'unboxing è una conversione esplicita.

Conclusione:

Sia il pugilato che l'unboxing consumano più tempo e memoria, e sono computazionalmente costosi. Inoltre mancano di sicurezza del tipo e aumentano il sovraccarico di runtime. Si consiglia sempre di evitare un uso eccessivo del pugilato e di unboxing nel programma.

Top