Csharp/C Sharp/Data Types/Boxing Unboxing
Версия от 15:31, 26 мая 2010; (обсуждение)
Содержание
- 1 A simple boxing/unboxing example
- 2 Automatic boxing and unboxing to pass an undetermined data type to a function
- 3 Boxing also occurs when passing values
- 4 Boxing makes it possible to call methods on a value
- 5 Boxing struct object
- 6 explicit boxing of an int to an object
- 7 explicit unboxing of an object to an int
- 8 Illustrates boxing and unboxing
- 9 implicit boxing of an int
- 10 is and Box UnBox
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);
}
}
Automatic boxing and unboxing to pass an undetermined data type to a function
/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa
Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
// Obj.cs - Demonstrates automatic boxing and unboxing to pass an
// undetermined data type to a function.
// Compile this program with the following command line:
// C:>csc Obj.cs
//
namespace nsObject
{
using System;
public class Obj
{
static public void Main ()
{
double d = 3.14159;
// Pass a double to Square ()
object o = Square (d);
ShowSquare (o);
// Pass an int to Square ()
o = Square (42);
ShowSquare (o);
// Pass a float to Square ()
o = Square (2.71828F);
ShowSquare (o);
}
// Square () returns the boxed square of a value if the data type is
// int or double. Otherwise, Square() returns a null reference
static object Square (object o)
{
if (o is double)
return ((double) o * (double) o);
if (o is int)
return ((int) o * (int) o);
return (null);
}
static public void ShowSquare (object o)
{
if (Object.Equals (o, null))
Console.WriteLine ("The object is null");
else
Console.WriteLine ("The square is " + o);
}
}
}
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;
}
}
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 struct object
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
struct MyPoint {
public int x, y;
}
class Program {
public static void UseThisObject(object o) {
Console.WriteLine("Type of param: {0}", o.GetType());
Console.WriteLine("Value of o is: {0}", o);
}
public static void BoxAndUnboxInts() {
ArrayList myInts = new ArrayList();
myInts.Add(88);
myInts.Add(3);
myInts.Add(9764);
int firstItem = (int)myInts[0];
Console.WriteLine("First item is {0}", firstItem);
}
public static void UseBoxedMyPoint(object o) {
if (o is MyPoint) {
MyPoint p = (MyPoint)o;
Console.WriteLine("{0}, {1}", p.x, p.y);
} else
Console.WriteLine("You did not send a MyPoint.");
}
static void Main(string[] args) {
int myInt = 99;
UseThisObject(myInt);
BoxAndUnboxInts();
MyPoint p;
p.x = 10;
p.y = 20;
UseBoxedMyPoint(p);
UseBoxedMyPoint(1);
}
}
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);
}
}
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);
}
}
Illustrates boxing and unboxing
/*
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);
}
}
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());
}
}
is and Box UnBox
/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa
Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
namespace nsBox
{
using System;
struct Point
{
public Point (int x, int y)
{
cx = x;
cy = y;
}
public override string ToString ()
{
return ("(" + cx + ", " + cy + ")");
}
public int cx;
public int cy;
}
public class BoxUnBox
{
static public void Main ()
{
long LongVal = 9600;
object o = LongVal;
ShowObject (o);
o = 4096;
ShowObject (o);
Point point = new Point (42, 96);
ShowObject (point);
clsBox test = new clsBox();
ShowObject (test);
}
static public void ShowObject (object o)
{
if (o is int)
Console.WriteLine ("The object is an integer");
if (o is long)
Console.WriteLine ("The object is a long");
else if (o is Point)
Console.WriteLine ("The object is a Point structure");
else if (o is clsBox)
Console.WriteLine ("The object is a clsBox class object");
Console.WriteLine ("The value of object is " + o + "\r\n");
}
}
class clsBox
{
public override string ToString()
{
return ("\"-- clsBox --\"");
}
}
}