-----------------------------------------------------------

New Message on BDOTNET

-----------------------------------------------------------
From: Arian_Intellect
Message 2 in Discussion


Read this
 


Boxing And Unboxing C#


Boxing and unboxing is a essential concept in C#�s type system. With Boxing 
and unboxing one can link between value-types and reference-types by allowing 
any value of a value-type to be converted to and from type object. Boxing and 
unboxing enables a unified view of the type system wherein a value of any type 
can ultimately be treated as an object. 

Converting a value type to reference type is called Boxing.Unboxing is an 
explicit operation. 

C# provides a �unified type system�. All types�including value types�derive 
from the type object. It is possible to call object methods on any value, even 
values of �primitive� types such as int. 

The example using System;
class Test
{
        static void Main() {
                Console.WriteLine(3.ToString());
        }
}
calls the object-defined ToString method on an integer literal. 

The example class Test
{
        static void Main() {
                int i = 1;
                object o = i;           // boxing
                int j = (int) o;        // unboxing
        }
}
An int value can be converted to object and back again to int. 

This example shows both boxing and unboxing. When a variable of a value type 
needs to be converted to a reference type, an object box is allocated to hold 
the value, and the value is copied into the box. 

Unboxing is just the opposite. When an object box is cast back to its 
original value type, the value is copied out of the box and into the appropriate 
storage location. 

Boxing conversions 

A boxing conversion permits any value-type to be implicitly converted to the 
type object or to any interface-type implemented by the value-type. Boxing a 
value of a value-type consists of allocating an object instance and copying the 
value-type value into that instance. 

For example any value-type G, the boxing class would be declared as follows: class vBox
{
        G value;
        G_Box(G g) {
                value = g;
        }
}
Boxing of a value v of type G now consists of executing the expression new 
G_Box(v), and returning the resulting instance as a value of type object. 

Thus, the statements
int i = 12;
object box = i; 

conceptually correspond to
int i = 12;
object box = new int_Box(i); 

Boxing classes like G_Box and int_Box above don�t actually exist and the 
dynamic type of a boxed value isn�t actually a class type. Instead, a boxed 
value of type G has the dynamic type G, and a dynamic type check using the is 
operator can simply reference type G. For example,
int i = 12;
object box 
= i;
if (box is int) {
Console.Write("Box contains an int");
} 

will output the string �Box contains an int� on the console. 

A boxing conversion implies making a copy of the value being boxed. This is 
different from a conversion of a reference-type to type object, in which the 
value continues to reference the same instance and simply is regarded as the 
less derived type object. 

For example, given the declaration struct Point
{
        public int x, y;
        public Point(int x, int y) {
                this.x = x;
                this.y = y;
        }
}
the following statements
Point p = new Point(10, 10);
object box = 
p;
p.x = 20;
Console.Write(((Point)box).x);
will output the value 10 on 
the console because the implicit boxing operation that occurs in the assignment 
of p to box causes the value of p to be copied. Had Point instead been declared 
a class, the value 20 would be output because p and box would reference the same 
instance. 

Unboxing conversions 

An unboxing conversion permits an explicit conversion from type object to any 
value-type or from any interface-type to any value-type that implements the 
interface-type. An unboxing operation consists of first checking that the object 
instance is a boxed value of the given value-type, and then copying the value 
out of the instance. unboxing conversion of an object box to a value-type G 
consists of executing the expression ((G_Box)box).value. 

Thus, the statements object box = 12;
int i = (int)box; 

conceptually correspond to
object box = new int_Box(12);
int i = 
((int_Box)box).value;
For an unboxing conversion to a given value-type to 
succeed at run-time, the value of the source argument must be a reference to an 
object that was previously created by boxing a value of that value-type. If the 
source argument is null or a reference to an incompatible object, an 
InvalidCastException is thrown. 

CONCLUSION : 

This type system unification provides value types with the benefits of 
object-ness without introducing unnecessary overhead. 

For programs that don�t need int values to act like objects, int values are 
simply 32-bit values. For programs that need int values to behave like objects, 
this capability is available on demand. This ability to treat value types as 
objects bridges the gap between value types and reference types that exists in 
most languages. 

 
Shaju Thomas
e-Cosmos Technologies Ltd.,
Mail: [EMAIL PROTECTED]
Phone(Off) 
:  51217038/39 Extn: 132
Mobile:  +91 98455 21794

  ----- Original Message ----- 
  From: 
  BalajiKrishnan 
  To: BDOTNET 
  Sent: Thursday, October 16, 2003 3:31 
  PM
  Subject: .NET Concepts........
  
-----------------------------------------------------------

New 
  Message on 
  BDOTNET

-----------------------------------------------------------
From: 
  BalajiKrishnan
Message 1 in Discussion

Dear All,   Can any 
  one explain me what is    a.Monitor Class b.Boxing and 
  Unboxing  c.Threading.   and also tell me where it can be 
  used......   Thanks Balaji.  
  

-----------------------------------------------------------

To 
  stop getting this e-mail, or change how often it arrives, go to your E-mail 
  Settings.
http://groups.msn.com/BDotNet/_emailsettings.msnw

Need 
  help? If you've forgotten your password, please go to Passport Member 
  Services.
http://groups.msn.com/_passportredir.msnw?ppmprop=help

For 
  other questions or feedback, go to our Contact Us page.
http://groups.msn.com/contact

If 
  you do not want to receive future e-mail from this MSN group, or if you 
  received this message by mistake, please click the "Remove" link below. On the 
  pre-addressed e-mail message that opens, simply click "Send". Your e-mail 
  address will be deleted from this group's mailing list.
mailto:[EMAIL PROTECTED]


-----------------------------------------------------------

To stop getting this e-mail, or change how often it arrives, go to your E-mail 
Settings.
http://groups.msn.com/BDotNet/_emailsettings.msnw

Need help? If you've forgotten your password, please go to Passport Member Services.
http://groups.msn.com/_passportredir.msnw?ppmprop=help

For other questions or feedback, go to our Contact Us page.
http://groups.msn.com/contact

If you do not want to receive future e-mail from this MSN group, or if you received 
this message by mistake, please click the "Remove" link below. On the pre-addressed 
e-mail message that opens, simply click "Send". Your e-mail address will be deleted 
from this group's mailing list.
mailto:[EMAIL PROTECTED]

Reply via email to