Differenza tra boxe e unboxing in C #

Autore: Laura McKinney
Data Della Creazione: 2 Aprile 2021
Data Di Aggiornamento: 5 Maggio 2024
Anonim
Should You Buy the Nike or Standard Apple Watch Series 7!? Compared!
Video: Should You Buy the Nike or Standard Apple Watch Series 7!? Compared!

Contenuto


In C #, tutti i tipi di valore sono derivati ​​dall'oggetto classe. Pertanto, una variabile di riferimento di tipo oggetto può fare riferimento a qualsiasi altro tipo di valore. C # introduce due metodi a Boxing e Unboxing, che collega il tipo di valore al tipo di riferimento. La differenza di base tra Boxing e Unboxing è che Boxing è la conversione del tipo di valore in un tipo di oggetto mentre, invece, il termine Unboxing si riferisce alla conversione del tipo di oggetto nel tipo di valore. Studiamo le altre differenze tra Boxing e Unboxing.

  1. Tabella di comparazione
  2. Definizione
  3. Differenze chiave
  4. Conclusione

Tabella di comparazione

Base per il confrontoBoxeunboxing
Di baseIl tipo di oggetto si riferisce al tipo di valore.processo di recupero del valore dall'oggetto inscatolato.
ConservazioneIl valore archiviato nello stack viene copiato nell'oggetto archiviato nella memoria dell'heap.Il valore degli oggetti archiviato nella memoria dell'heap viene copiato nel tipo di valore archiviato nello stack.
ConversioneConversione implicita.Conversione 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 viene archiviato nello stack e il tipo di oggetto viene archiviato nella memoria dell'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 rimanente. Comprendiamo la boxe con un esempio.

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

Nel codice sopra, il tipo intero i contenente il valore 24 è memorizzato nello stack e viene copiato nel tipo di oggetto ob. Un tipo di oggetto fa ora riferimento a un valore intero. Ora, "int i" contiene anche il valore 24 e "tipo di oggetto 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à il cambiamento nella valore di ob.


La boxe consuma memoria aggiuntiva e tempo extra. Il motivo è che un nuovo oggetto, che farà riferimento 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 in modo da raggiungere il tipo di oggetto, nella posizione della memoria dell'heap.

Definizione di Unboxing

Il contrario di Boxing è Unboxing. Unboxing è una conversione del tipo di oggetto nel tipo di valore. In Unboxing il valore del tipo di oggetto inscatolato archiviato nell'heap viene trasferito nel tipo di valore archiviato nello stack. Diversamente dalla boxe, la Unboxing deve essere fatta esplicitamente. Il tipo di oggetto viene esplicitamente trasmesso al 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; // Casella il tipo intero n nel tipo di oggetto ob. int j = (int) ob; // Deseleziona il valore intero memorizzato nel tipo di oggetto ob nel tipo intero y.

Il valore memorizzato nell'oggetto ob viene recuperato lanciandolo nello stesso tipo dell'oggetto a cui si riferiva, ovvero il tipo intero "j".

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

  1. Nel pugilato, un oggetto viene fatto riferimento come tipo di valore. D'altra parte, il processo di recupero del valore dall'oggetto inscatolato si chiama unboxing.
  2. Un tipo di valore archiviato in uno stack viene copiato nell'oggetto archiviato nella memoria dell'heap. D'altra parte, in unboxing, un oggetto archiviato nella memoria heap viene copiato in un tipo di valore archiviato nella memoria stack.
  3. Il pugilato è una conversione implicita, mentre il unboxing è una conversione esplicita.

Conclusione:

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