Recommandé, 2024

Choix De L'Éditeur

Différence entre la boxe et Unboxing en C #

En C #, tous les types de valeur sont dérivés de l'objet de classe. Ainsi, une variable de référence de type objet peut faire référence à tout autre type de valeur. C # introduit deux méthodes dans Boxing et Unboxing, qui lie le type de valeur au type de référence. La différence fondamentale entre Boxing et Unboxing réside dans le fait que Boxing correspond à la conversion du type de valeur en un type d'objet alors que, d'autre part, le terme Unboxing fait référence à la conversion du type d'objet en type de valeur. Étudions les autres différences entre Boxing et Unboxing.

Tableau de comparaison

Base de comparaisonBoxeDéballage
De baseLe type d'objet fait référence au type de valeur.processus de récupération de la valeur de l'objet boxed.
Espace de rangementLa valeur stockée sur la pile est copiée dans l'objet stocké dans la mémoire de tas.La valeur de l'objet stockée dans la mémoire de tas est copiée dans le type de valeur stocké dans la pile.
ConversionConversion implicite.Conversion explicite.
Exempleint n = 24;
objet ob = n;
int m = (int) ob;

Définition de la boxe

La boxe est une procédure de conversion d'un type de valeur en type d'objet. Ici, le type de valeur est stocké sur la pile et le type d'objet est stocké dans la mémoire de tas. Cette conversion de type valeur en type d'objet est une conversion implicite. Vous pouvez affecter directement une valeur à un objet et C # gérera la conversion restante. Comprenons la boxe avec un exemple.

 int i = 24; objet ob = i; // Encadre le type entier n dans le type d'objet ob. ou objet ob1 = 21; // ici aussi un type d'objet ob1 fait référence à un type entier 

Dans le code ci-dessus, le type entier i contenant la valeur 24 est stocké dans la pile et copié dans le type d'objet ob. Un type d'objet fait maintenant référence à une valeur entière. Maintenant, “int i” contient également la valeur 24 et le “type d'objet ob” contient également la valeur 24, mais les deux valeurs sont indépendantes l'une de l'autre. Si vous modifiez la valeur de i, elle ne reflétera pas la modification de la valeur de ob.

La boxe consomme plus de mémoire et plus de temps. La raison en est qu'un nouvel objet, qui fera référence au type de valeur, doit allouer de l'espace mémoire sur le tas. Ensuite, la valeur du type de valeur stockée sur la pile sera transférée à ob le type d'objet, à l'emplacement de la mémoire de tas.

Définition du déballage

Le revers de la boxe est Unboxing. Unboxing est une conversion du type d'objet en type de valeur. Dans Unboxing, la valeur du type d'objet encadré stocké sur le segment de mémoire est transférée au type de valeur stocké dans la pile. Contrairement à la boxe, le déballage doit être fait explicitement. Le type d'objet est explicitement converti en type valeur et le type valeur doit être identique à la valeur à laquelle le type d'objet fait référence. Comprenons le concept de Unboxing avec un exemple.

 int i = 24; objet ob = i; // Encadre le type entier n dans le type d'objet ob. int j = (int) ob; // Décochez la valeur entière stockée dans le type d'objet ob au type entier y. 

La valeur stockée dans l'objet ob est récupérée en la convertissant dans le même type que l'objet auquel il faisait référence, à savoir le type entier «j».

Unboxing consomme également plus de mémoire et plus de temps. Depuis, lorsqu'un type d'objet doit être déballé, la valeur du type d'objet stocké dans le segment de mémoire doit être transférée vers le nouveau type de valeur stocké dans la pile. Le type d'objet dont la valeur a été extraite sera désormais disponible pour le garbage collection.

Différences clés entre la boxe et le déballage

  1. En boxe, un objet est fait référence à un type de valeur. D'autre part, le processus de récupération de la valeur de l'objet boxed s'appelle unboxing.
  2. Un type de valeur stocké sur une pile est copié dans l'objet stocké dans la mémoire de tas. En revanche, dans le déballage, un objet stocké dans la mémoire de tas est copié dans un type de valeur stocké dans la mémoire de pile.
  3. La boxe est une conversion implicite, alors que le désemballage est une conversion explicite.

Conclusion:

La boxe et le déballage consomment plus de temps et de mémoire, et sont coûteux en calcul. Ils manquent également de sécurité de type et augmentent les frais généraux d’exécution. Il est toujours conseillé d'éviter de trop utiliser la boxe et le déballage dans le programme.

Top