/* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110 */ /* Example7_8.cs illustrates boxing and unboxing */ using System; public class Example7_8 { public static void Main() { // implicit boxing of an int int myInt1 = 10; Console.WriteLine("myInt1.ToString() = " + myInt1.ToString()); Console.WriteLine("myInt1.GetType() = " + myInt1.GetType()); // explicit boxing of an int to an object int myInt2 = 10; object myObject = myInt2; // myInt2 is boxed Console.WriteLine("myInt2 = " + myInt2); Console.WriteLine("myObject = " + myObject); // explicit unboxing of an object to an int int myInt3 = (int) myObject; // myObject is unboxed Console.WriteLine("myInt3 = " + myInt3); } }
Data Types
Boxing makes it possible to call methods on a value
/* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ // Boxing makes it possible to call methods on a value! using System; public class MethOnValue { public static void Main() { Console.WriteLine(10.ToString()); } }
Boxing also occurs when passing values
/* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ // Boxing also occurs when passing values. using System; public class BoxingDemo11 { public static void Main() { int x; x = 10; Console.WriteLine("Here is x: " + x); // x is automatically boxed when passed to sqr() x = BoxingDemo11.sqr(x); Console.WriteLine("Here is x squared: " + x); } static int sqr(object o) { return (int)o * (int)o; } }
A simple boxing/unboxing example
/* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ // A simple boxing/unboxing example. using System; public class BoxingDemo { public static void Main() { int x; object obj; x = 10; obj = x; // box x into an object int y = (int)obj; // unbox obj into an int Console.WriteLine(y); } }
explicit unboxing of an object to an int
using System; class MainClass { public static void Main() { object myObject = 3; int myInt3 = (int)myObject; // myObject is unboxed Console.WriteLine("myInt3 = " + myInt3); } }
explicit boxing of an int to an object
using System; class MainClass { public static void Main() { int myInt2 = 10; object myObject = myInt2; // myInt2 is boxed Console.WriteLine("myInt2 = " + myInt2); Console.WriteLine("myObject = " + myObject); } }
implicit boxing of an int
using System; class MainClass { public static void Main() { int myInt1 = 10; Console.WriteLine("myInt1.ToString() = " + myInt1.ToString()); Console.WriteLine("myInt1.GetType() = " + myInt1.GetType()); } }