Sunteți pe pagina 1din 7

Conversin boxing y unboxing (Gua de programacin de C#)

http://msdn.microsoft.com/es-es/library/yz2be5wk(d=printer).aspx

Este artculo se tradujo de forma manual. Mueva el puntero sobre las frases del artculo para ver el texto original. Ms informacin.

Traduccin

Original

Visual Studio 2013

Este tema an no ha recibido ninguna valoracin

La conversin boxing es el proceso de convertir un tipo de valor en el tipo object o en cualquier tipo de interfaz implementada por ese tipo de valor. Cuando CLR aplica la conversin boxing a un tipo de valor, ajusta el valor dentro de una clase System.Object y lo almacena en el montn administrado. La conversin unboxing extrae el tipo de valor del objeto. La conversin boxing es implcita y la conversin unboxing es explcita. El concepto de conversin boxing y unboxing es la base de la vista unificada del sistema de tipos de C#, en el que un valor de cualquier tipo se puede tratar como objeto. En el ejemplo siguiente, se aplica la conversin boxing a la variable de entero i y esta se asigna al objeto o. C#

inti=123; //Thefollowinglineboxesi. objecto=i;

A continuacin, se puede aplicar la conversin unboxing al objeto oy asignarlo a la variable de entero i: C#

o=123; i=(int)o;//unboxing

En los ejemplos siguientes se muestra cmo usar la conversin boxing en C#. C#

//String.Concatexample. //String.Concathasmanyversions.Restthemousepointeron //Concatinthefollowingstatementtoverifythattheversion //thatisusedheretakesthreeobjectarguments.Both42and //truemustbeboxed. Console.WriteLine(String.Concat("Answer",42,true));

//Listexample. //Createalistofobjectstoholdaheterogeneouscollection //ofelements.

1 de 7

12/02/2014 02:48 p.m.

Conversin boxing y unboxing (Gua de programacin de C#)

http://msdn.microsoft.com/es-es/library/yz2be5wk(d=printer).aspx

List<object>mixedList=newList<object>(); //Addastringelementtothelist. mixedList.Add("FirstGroup:"); //Addsomeintegerstothelist. for(intj=1;j<5;j++) { //Restthemousepointeroverjtoverifythatyouareadding //aninttoalistofobjects.Eachelementjisboxedwhen //youaddjtomixedList. mixedList.Add(j); } //Addanotherstringandmoreintegers. mixedList.Add("SecondGroup:"); for(intj=5;j<10;j++) { mixedList.Add(j); } //Displaytheelementsinthelist.Declaretheloopvariableby //usingvar,sothatthecompilerassignsitstype. foreach(variteminmixedList) { //Restthemousepointeroveritemtoverifythattheelements //ofmixedListareobjects. Console.WriteLine(item); } //Thefollowingloopsumsthesquaresofthefirstgroupofboxed //integersinmixedList.Thelistelementsareobjects,andcannot //bemultipliedoraddedtothesumuntiltheyareunboxed.The //unboxingmustbedoneexplicitly. varsum=0; for(varj=1;j<5;j++) { //Thefollowingstatementcausesacompilererror:Operator //'*'cannotbeappliedtooperandsoftype'object'and //'object'. //sum+=mixedList[j]*mixedList[j]); //Afterthelistelementsareunboxed,thecomputationdoes //notcauseacompilererror. sum+=(int)mixedList[j]*(int)mixedList[j]; } //Thesumdisplayedis30,thesumof1+4+9+16. Console.WriteLine("Sum:"+sum); //Output: //Answer42True //FirstGroup: //1 //2 //3 //4 //SecondGroup:

2 de 7

12/02/2014 02:48 p.m.

Conversin boxing y unboxing (Gua de programacin de C#)

http://msdn.microsoft.com/es-es/library/yz2be5wk(d=printer).aspx

//5 //6 //7 //8 //9 //Sum:30

Con relacin a las asignaciones simples, las conversiones boxing y unboxing son procesos que consumen muchos recursos. Cuando se aplica la conversin boxing a un tipo de valor, se debe asignar y construir un objeto completamente nuevo. En menor grado, la conversin de tipos requerida para aplicar la conversin unboxing tambin es costosa. Para obtener ms informacin, vea Rendimiento.

La conversin boxing se utiliza para almacenar tipos de valor en el montn de recoleccin de elementos no utilizados. La conversin boxing es una conversin implcita de un tipo de valor al tipo object o a cualquier tipo de interfaz implementada por este tipo de valor. Al aplicar la conversin boxing a un tipo de valor se asigna una instancia de objeto en el montn y se copia el valor en el nuevo objeto. Considere la siguiente declaracin de una variable de tipo de valor: C#

inti=123;

La siguiente instruccin aplica implcitamente la operacin de conversin boxing en la variable i: C#

//Boxingcopiesthevalueofiintoobjecto. objecto=i;

El resultado de esta instruccin es crear una referencia de objeto o en la pila que hace referencia a un valor del tipo int en el montn. Este valor es una copia del tipo de valor asignado a la variable i. La diferencia entre las dos variables, i y o, se muestra en la figura siguiente. Conversin boxing

3 de 7

12/02/2014 02:48 p.m.

Conversin boxing y unboxing (Gua de programacin de C#)

http://msdn.microsoft.com/es-es/library/yz2be5wk(d=printer).aspx

Tambin es posible realizar la conversin boxing de manera explcita, tal como se muestra en el ejemplo siguiente, pero esta nunca es necesaria: C#

inti=123; objecto=(object)i;//explicitboxing

Este ejemplo convierte una variable de entero i en un objeto o mediante la conversin boxing. A continuacin, el valor almacenado en la variable i se cambia de 123 a 456. El ejemplo muestra que el tipo de valor original y el objeto al que se ha aplicado la conversin boxing usan ubicaciones de memoria independientes y, por consiguiente, pueden almacenar valores diferentes.

C#

classTestBoxing { staticvoidMain() { inti=123; //Boxingcopiesthevalueofiintoobjecto. objecto=i; //Changethevalueofi. i=456; //Thechangeinidoesnoteffectthevaluestoredino. System.Console.WriteLine("Thevaluetypevalue={0}",i); System.Console.WriteLine("Theobjecttypevalue={0}",o); } } /*Output: Thevaluetypevalue=456

4 de 7

12/02/2014 02:48 p.m.

Conversin boxing y unboxing (Gua de programacin de C#)

http://msdn.microsoft.com/es-es/library/yz2be5wk(d=printer).aspx

Theobjecttypevalue=123 */

El ejemplo siguiente muestra un caso de conversin unboxing no vlida y la excepcin InvalidCastException resultante. Si se utiliza try y catch, se muestra un mensaje de error cuando se produce el error. C#

classTestUnboxing { staticvoidMain() { inti=123; objecto=i;//implicitboxing try { intj=(short)o;//attempttounbox System.Console.WriteLine("UnboxingOK."); } catch(System.InvalidCastExceptione) { System.Console.WriteLine("{0}Error:Incorrectunboxing.",e.Message); } } }

Este programa produce el resultado siguiente: Specifiedcastisnotvalid.Error:Incorrectunboxing. Si cambia la instruccin:

intj=(short)o; a:

intj=(int)o; la conversin se realizar y se obtendr el resultado: UnboxingOK.

5 de 7

12/02/2014 02:48 p.m.

Conversin boxing y unboxing (Gua de programacin de C#)

http://msdn.microsoft.com/es-es/library/yz2be5wk(d=printer).aspx

La conversin unboxing es una conversin explcita del tipo object a un tipo de valor o de un tipo de interfaz a un tipo de valor que implementa la interfaz. Una operacin de conversin unboxing consiste en lo siguiente: Comprobar la instancia de objeto para asegurarse de que se trata de un valor de conversin boxing del tipo de valor dado. Copiar el valor de la instancia en la variable de tipo de valor. Las siguientes instrucciones muestran las operaciones de conversin boxing y unboxing: C#

inti=123;//avaluetype objecto=i;//boxing intj=(int)o;//unboxing

En la figura siguiente se muestra el resultado de las instrucciones anteriores. Conversin unboxing

Para que la conversin unboxing de tipos de valor sea correcta en tiempo de ejecucin, el elemento al que se aplica debe ser una referencia a un objeto creado previamente mediante la conversin boxing de una instancia de ese tipo de valor. Si se intenta aplicar la conversin unboxing a null, se producir una excepcin NullReferenceException. Si se intenta aplicar la conversin unboxing a una referencia de un tipo de valor incompatible, se producir una excepcin InvalidCastException.

Para obtener ms informacin, vea la Especificacin del lenguaje C#. La especificacin del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

6 de 7

12/02/2014 02:48 p.m.

Conversin boxing y unboxing (Gua de programacin de C#)

http://msdn.microsoft.com/es-es/library/yz2be5wk(d=printer).aspx

Para obtener ms informacin: Tipos de referencia Tipos de valor

Para obtener ms informacin, vea la Especificacin del lenguaje C#. La especificacin del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Conceptos Gua de programacin de C#

Adiciones de comunidad
2014 Microsoft. Reservados todos los derechos.

7 de 7

12/02/2014 02:48 p.m.

S-ar putea să vă placă și