In C#, boxing and unboxing are concepts related to converting value types (such as int, char, etc.) to reference types (such as object). Let’s explore both concepts with examples:
Boxing:
- Boxing is the process of converting a value type to the type
objector any interface type implemented by that value type. - When the Common Language Runtime (CLR) boxes a value type, it wraps the value inside an
objectinstance and stores it on the managed heap. - Here’s an example of boxing:
int i = 123; // The following line boxes 'i'. object o = i; - In this example, the integer variable
iis boxed and assigned to theobjectvariableo.
- Boxing is the process of converting a value type to the type
Unboxing:
- Unboxing is the process of extracting the value type from an
object. - It converts the
objectback to its original value type. - Example of unboxing:
o = 123; // Unboxing: extract the value from 'o' and assign it to 'i'. int unboxedValue = (int)o;
- Unboxing is the process of extracting the value type from an
Practical Example:
- Let’s create a heterogeneous collection using an
ArrayList(a dynamically sized array of objects):ArrayList mixedList = new ArrayList(); mixedList.Add("First Group:"); // Add a string element for (int j = 1; j < 5; j++) { mixedList.Add(j); // Add integers (boxing occurs) } mixedList.Add("Second Group:"); for (int j = 5; j < 10; j++) { mixedList.Add(j); } // Display the elements in the list foreach (var item in mixedList) { Console.WriteLine(item); } // Calculate the sum of squares of the first group of integers var sum = 0; for (var j = 1; j < 5; j++) { sum += (int)mixedList[j] * (int)mixedList[j]; // Unboxing } Console.WriteLine($"Sum: {sum}"); // Output: Sum: 30 - In this example, we box integers when adding them to the
ArrayListand unbox them during the sum calculation.
- Let’s create a heterogeneous collection using an
Remember that boxing and unboxing have performance implications, so use them judiciously.