Sobes.tech
Middle

Qu'est-ce que le boxing et le unboxing en C# et comment peut-on éviter ces processus?

sobes.tech IA

Réponse de l'IA

L’emballage (boxing) est la conversion implicite du type de valeur en un type de référence object ou tout autre type de référence dérivé de object. La valeur est placée dans une nouvelle zone mémoire dans le tas géré.

Le déballage (unboxing) est la conversion explicite d’un type de référence object en un type de valeur. Il commence par vérifier si l’objet est une instance du type de valeur souhaité, puis copie son champ de données depuis le tas.

Exemples:

// Emballage (boxing)
int valeurType = 10;
object referenceType = valeurType; // valeurType est emballé dans un object

// Déballage (unboxing)
int valeurDéballée = (int)referenceType; // referenceType est déballé en int

Il est possible d’éviter l’emballage et le déballage en utilisant des génériques. Les collections et méthodes génériques travaillent directement avec des types de valeur, sans nécessiter leur conversion en object. Cela améliore la performance et la sécurité de type.

Exemple avec des génériques:

// Utilisation de List<T> au lieu de ArrayList
using System.Collections.Generic;

List<int> listeGénérique = new List<int>();
listeGénérique.Add(10); // Pas d’emballage

int valeur = listeGénérique[0]; // Pas de déballage

L’utilisation de génériques évite les coûts liés à l’allocation mémoire dans le tas et à la copie de données lors de l’emballage/déballage, ainsi que les erreurs de type à l’exécution.