SlideShare ist ein Scribd-Unternehmen logo
1 von 5
Downloaden Sie, um offline zu lesen
Conversión entre Tipos
La conversión entre tipos permite comparar y copiar valores entre diferentes tipos. En esta lección
describiremos como convertir un tipo dado en otro.


Conversión en VB y C#
Existen 2 tipos de conversiones entre tipos:

       Conversión implícita: Son aquellas conversiones entre tipos que no requieren una sintaxis
        especial en el código. Este tipo de conversiones se emplean cuando tipo destino puede
        acomodar todos los valores posibles del tipo origen. Visual Basic por defecto permite la
        conversión implícita entre tipos independientemente si el tipo destino puede acomodar todos
        los valores del tipo origen. C# prohíbe las conversiones implícitas que causen una pérdida de
        rango o precisión. Ejemplos de conversiones implícitas:
        C#
        int i = 3;
        double d = 3.1416;
        d = i;   // ahora d = 3

        Visual Basic
        Dim i as Integer = 1
        Dim d as Double = 3.1416
        d = i ' ahora d = 3



       Conversión explícita: Son aquellas conversiones entre tipos que requieren el uso de palabras
        reservadas del lenguaje o de de tipos del framework que ayudan en la conversión. Este tipo de
        conversiones se emplean cuando el tipo destino no puede acomodar todos los posibles valores
        del tipo origen y por lo tanto se requiere expresar explícitamente en el código esa intención. Las
        conversiones explícitas de emplean cuando se conoce de antemano que el valor origen puede
        ser convertido al tipo destino sin pérdida o error. Existen muchas maneras de realizar
        conversiones explícitas, entre ellas:
A nivel de .Net Framework, esto es independiente del lenguaje elegido

System.Convert

Provee métodos que permiten la conversión entre tipos que implementan la interface
System.IConvertible. Todos los tipos de datos del Framework implementan IConvertible.

tipo.ToString

Para convertir el valor de una instancia a una cadena que lo representa. Donde “tipo” es
cualquier tipo de dato del framework o definido por el usuario que sobrecarga la función
“ToString”. Si la conversión no es posible se lanza una excepción.

tipo.Parse

Para convertir una representación en cadena a un tipo específico. Donde “tipo” es cualquier tipo
de dato básico del framework. Si la conversión no es posible se lanza una excepción.

tipo.TryParse y tipo.TryParseExact

Es similar al método “Parse”, sólo que no lanza una excepción si la conversión falla sino que
devuelve el valor booleano false.



En C#

(tipo) expresión

Los paréntesis se pueden utilizar para especificar conversiones de tipos. Donde “tipo” es el tipo
al que deseamos convertir, que tiene definido operadores de conversión. De esta manera se
invoca explícitamente al operador de conversión de un tipo a otro. La operación de conversión
falla y genera un error en tiempo de compilación si no hay un operador de conversión definido
entre los tipos que se desea convertir.

as

La palabra reservada “as” se utiliza para realizar conversiones entre tipos por referencia
compatibles, si la conversión no es posible se retorna null en vez de lanzar una excepción.
En VB

         CType(expresión, tipo)

         Es análogo al operador de conversión (tipo) expresión de C#.

         CBool(expresión), CInt(expresión), CStr(expresión), etc.

         Permiten la conversión entre los diferentes tipos básicos de Visual Basic. Estas funciones con
         compiladas en línea, proporcionando una mejor performance. Se recomienda utilizar estas
         funciones de conversión de tipos de Visual Basic en preferencia a las que proporciona .Net
         Framework con el método ToString() o la Clase Convert, ya que estas funciones están
         diseñadas para una interacción óptima con Visual Basic.

         DirectCast(expresión, tipo)

         Es similar a CType pero sólo opera en tipos por referencia. Para que la conversión sea exitosa
         se requiere una relación de herencia o de implementación entre los tipos de datos de los
         argumentos de lo contrario se lanza una excepción. Lo que significa que un tipo debe heredar o
         implementar el otro.

         TryCast(expresión, tipo)

         Es exactamente igual a DirectCast salvo que en vez de lanzar una excepción cuando la
         conversión no es posible devuelve Nothing.




Boxing y Unboxing
Boxing: Convierte un tipo por valor a un tipo por referencia. Cuando necesitamos tratar a tipos por
valor como enteros, booleanos o estructuras como si fueran referencias se construye un objeto del tipo
System.Object y se copia el valor a esa referencia. Boxing ocurre implícitamente cuando un tipo por
valor es pasado como parámetro a un tipo object. Por ello es recomendable no diseñar métodos que
acepten parámetros del tipo System.Object sino crear tantas sobrecargas del método como con tipos
por valor a utilizar. La operación de Boxing, también ocurre implícitamente cuando se llaman a métodos
virtuales de una estructura que hereda de System.Object, como por ejemplo el método ToString(),
GetHash() y Equals. Por ello se recomienda sobrecargar estos métodos cuando se definen estructuras o
nuevos tipos por valor.
C#
int p = 123;
object o;
o = p; // Boxing implícito
o = (object) p; // Boxing explícito
Visual Basic
Dim p as Integer = 123;
Dim o as Object;
o = CType(p, Object) ' Boxing explícito



Unboxing: Convierte un tipo por referencia a un tipo por valor. Ocurre cuando se asigna una referencia
de un objeto a un tipo por valor. El valor almacenado en la referencia de objeto es copiado en la
ubicación que ocupa el tipo por valor.
C#
int p;
p = (int) o; // Unboxing explícito

Visual Basic
Dim p as Integer
p = CType(o, Integer) ' Unboxing explícito

La operación de Unboxing debe ser realizada con un operador de conversión explícito, si el valor
almacenado en la referencia de objeto no es del mismo tipo del que se especifica en la conversión se
generará una excepción.
Consejos:
Evitar aceptar los argumentos del tipo Object en métodos, para ello se recomienda el uso de Generics ó
de crear varias sobrecargas del método en cuestión que acepte varios tipos por valor.




Implementando Conversiones en Tipos Definidos por el Usuario
Cuando creamos una aplicación muchas veces definimos tipos de datos propios para facilitar el manejo
de información por parte de la misma; ahora bien, para lograr una integración óptima con el framework,
debemos de tener en cuenta detalles como el manejo de conversión entre tipos y otras funcionalidades
que pueden ser logradas a través de la sobre escritura de métodos.
En este caso vamos a seguir concentrados en el tema de interés que hemos venido estudiando: las
conversiones. Hay varias formas de implementar –o habilitar en su defecto- las conversiones en tipos
que han sido definidos por uno mismo, y la técnica que escojamos dependerá del tipo de conversión que
queramos hacer. Las formas más comunes se enlistan a continuación:

        Podemos definir los operadores de conversión para simplificar las conversiones de ampliación o
         reducción entre tipos numéricos. (Recordemos las densidades de los conjuntos que son
         representados por tipos int o float por ejemplo)

        Veamos ahora la sobre escritura de los métodos toString y Parse para conversión entre nuestra
         clase y la clase String. Esta es una muy buena práctica dado que como programadores asumimos
que cada objeto tiene bien definida la forma de presentarse como String, a pesar de que
        generalmente no se implemente y quedamos con el nombre de la clase únicamente.

       Adicionalmente podemos implementar la interface System.IConvertible para habilitar las
        conversiones utilizando el método System.Convert.
Ampliando un poco más sobre operadores de conversión, los podemos definir como los que nos van a
permitir asignar de otros tipos hacia el nuestro y viceversa directamente. Ahora bien, usaremos la forma
implícita si estamos ampliando dado que no vamos a perder precisión, y usaremos la forma explícita
cuando por el otro lado se puede dar perdida de precisión. (Para visualizar mejor este concepto,
pensemos en que creamos un tipo de datos llamado ”Fracción”, que nos permite guardar números
fraccionales en términos de numerador y denominador. Si queremos convertir de nuestro tipo de datos
a un tipo de datos float por ejemplo, no hay perdida de precisión -técnicamente-, mientras si lo pasamos
a un Integer es todo lo contrario)
        Pensando ahora en la sobre escritura de métodos, simplemente implementamos la interface
IConvertible y dejamos que el IDE implemente automáticamente la interface (él agregará métodos
según la interface, de los cuales modificamos los que sean relevantes para nuestro tipo de datos.
Ejemplo: probablemente el método ToDateTime sea irrelevante para nuestra clase Fracción).

Weitere ähnliche Inhalte

Was ist angesagt? (19)

Javascript 1
Javascript 1Javascript 1
Javascript 1
 
Anyi amaya
Anyi amayaAnyi amaya
Anyi amaya
 
Instrucciones(raptor, java, c#)
Instrucciones(raptor, java, c#)Instrucciones(raptor, java, c#)
Instrucciones(raptor, java, c#)
 
Estructuras sintácticas de los lenguaje
Estructuras sintácticas de los lenguajeEstructuras sintácticas de los lenguaje
Estructuras sintácticas de los lenguaje
 
Comandos de raptor c# y java
Comandos de raptor c# y javaComandos de raptor c# y java
Comandos de raptor c# y java
 
Clase09 java script
Clase09 java scriptClase09 java script
Clase09 java script
 
Palabras Reservadas en C++
Palabras Reservadas en C++Palabras Reservadas en C++
Palabras Reservadas en C++
 
Sentencia de Selección
Sentencia de SelecciónSentencia de Selección
Sentencia de Selección
 
comandos
comandoscomandos
comandos
 
Pseudocodigos
PseudocodigosPseudocodigos
Pseudocodigos
 
Leng prog C
Leng prog CLeng prog C
Leng prog C
 
Clase 10 expresiones regulares
Clase 10 expresiones regularesClase 10 expresiones regulares
Clase 10 expresiones regulares
 
Java script operaciones
Java script operacionesJava script operaciones
Java script operaciones
 
Java script
Java script Java script
Java script
 
Script presentacion
Script presentacionScript presentacion
Script presentacion
 
Mod2ud1 2
Mod2ud1 2Mod2ud1 2
Mod2ud1 2
 
Comandos de Raptor, Java y C# Sharp
Comandos de Raptor, Java y C# SharpComandos de Raptor, Java y C# Sharp
Comandos de Raptor, Java y C# Sharp
 
Prog oo con_java
Prog oo con_javaProg oo con_java
Prog oo con_java
 
Samuel bailon sanchez
Samuel bailon sanchezSamuel bailon sanchez
Samuel bailon sanchez
 

Ähnlich wie Conversion Entre Tipos Leccion 4

3. elementos del lenguaje. variables y estructuras de datos
3.  elementos del lenguaje. variables y estructuras de datos3.  elementos del lenguaje. variables y estructuras de datos
3. elementos del lenguaje. variables y estructuras de datosPablo Pacheco
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
Tipos de datos para C++
Tipos de datos para C++Tipos de datos para C++
Tipos de datos para C++juliancetis109
 
Tipos de datos_para_c_
Tipos de datos_para_c_Tipos de datos_para_c_
Tipos de datos_para_c_oscar020615
 
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosFramework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosAntonio Palomares Sender
 
Zope Page Templates
Zope Page TemplatesZope Page Templates
Zope Page TemplatesCodeSyntax
 
Características de c sharp
Características de c sharpCaracterísticas de c sharp
Características de c sharpuccvirtual
 
ESTRUCTURA DE CONTROLYoselyn garcia trabajo
ESTRUCTURA DE CONTROLYoselyn garcia trabajoESTRUCTURA DE CONTROLYoselyn garcia trabajo
ESTRUCTURA DE CONTROLYoselyn garcia trabajoDANNYOSE
 
tposdedatosc-200924033657.pptx
tposdedatosc-200924033657.pptxtposdedatosc-200924033657.pptx
tposdedatosc-200924033657.pptxErrol31
 
Net1 capitulo ii - variables de memoria & array
Net1   capitulo ii - variables de memoria & arrayNet1   capitulo ii - variables de memoria & array
Net1 capitulo ii - variables de memoria & arrayJose Ponce
 

Ähnlich wie Conversion Entre Tipos Leccion 4 (20)

Java
JavaJava
Java
 
Presentación de c #
Presentación de c #Presentación de c #
Presentación de c #
 
3. elementos del lenguaje. variables y estructuras de datos
3.  elementos del lenguaje. variables y estructuras de datos3.  elementos del lenguaje. variables y estructuras de datos
3. elementos del lenguaje. variables y estructuras de datos
 
Tipos de datos_para_c_(2)
Tipos de datos_para_c_(2)Tipos de datos_para_c_(2)
Tipos de datos_para_c_(2)
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
Tipos de datos para C++
Tipos de datos para C++Tipos de datos para C++
Tipos de datos para C++
 
Tipos de datos_para_c_
Tipos de datos_para_c_Tipos de datos_para_c_
Tipos de datos_para_c_
 
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosFramework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetos
 
Zope Page Templates
Zope Page TemplatesZope Page Templates
Zope Page Templates
 
4 variables, arreglos, estructuras y enum
4 variables, arreglos, estructuras y enum4 variables, arreglos, estructuras y enum
4 variables, arreglos, estructuras y enum
 
3. lenguaje c-
3. lenguaje c-3. lenguaje c-
3. lenguaje c-
 
Características de c sharp
Características de c sharpCaracterísticas de c sharp
Características de c sharp
 
C++
C++C++
C++
 
Tpos de datos c#
Tpos de datos c#Tpos de datos c#
Tpos de datos c#
 
ESTRUCTURA DE CONTROLYoselyn garcia trabajo
ESTRUCTURA DE CONTROLYoselyn garcia trabajoESTRUCTURA DE CONTROLYoselyn garcia trabajo
ESTRUCTURA DE CONTROLYoselyn garcia trabajo
 
Dp2
Dp2Dp2
Dp2
 
tposdedatosc-200924033657.pptx
tposdedatosc-200924033657.pptxtposdedatosc-200924033657.pptx
tposdedatosc-200924033657.pptx
 
Net1 capitulo ii - variables de memoria & array
Net1   capitulo ii - variables de memoria & arrayNet1   capitulo ii - variables de memoria & array
Net1 capitulo ii - variables de memoria & array
 
Estructuras básicas
Estructuras básicas Estructuras básicas
Estructuras básicas
 
R68235
R68235R68235
R68235
 

Mehr von kayrambal

SerializacióN Part 2
SerializacióN Part 2SerializacióN Part 2
SerializacióN Part 2kayrambal
 
Open And Reading Files
Open And Reading FilesOpen And Reading Files
Open And Reading Fileskayrambal
 
Navigating The File System
Navigating The File SystemNavigating The File System
Navigating The File Systemkayrambal
 
Navegar Sistema De Archivos
Navegar Sistema De ArchivosNavegar Sistema De Archivos
Navegar Sistema De Archivoskayrambal
 
Comunicaciones Unificadas De Ms
Comunicaciones Unificadas De MsComunicaciones Unificadas De Ms
Comunicaciones Unificadas De Mskayrambal
 
Linq En Visual Basic 2008
Linq En Visual Basic 2008Linq En Visual Basic 2008
Linq En Visual Basic 2008kayrambal
 
Trucos Y Efectos[1]
Trucos Y Efectos[1]Trucos Y Efectos[1]
Trucos Y Efectos[1]kayrambal
 

Mehr von kayrambal (9)

SerializacióN Part 2
SerializacióN Part 2SerializacióN Part 2
SerializacióN Part 2
 
Open And Reading Files
Open And Reading FilesOpen And Reading Files
Open And Reading Files
 
Navigating The File System
Navigating The File SystemNavigating The File System
Navigating The File System
 
Atributos
AtributosAtributos
Atributos
 
Navegar Sistema De Archivos
Navegar Sistema De ArchivosNavegar Sistema De Archivos
Navegar Sistema De Archivos
 
Comunicaciones Unificadas De Ms
Comunicaciones Unificadas De MsComunicaciones Unificadas De Ms
Comunicaciones Unificadas De Ms
 
Linq En Visual Basic 2008
Linq En Visual Basic 2008Linq En Visual Basic 2008
Linq En Visual Basic 2008
 
Trucos Y Efectos[1]
Trucos Y Efectos[1]Trucos Y Efectos[1]
Trucos Y Efectos[1]
 
Web2.0
Web2.0Web2.0
Web2.0
 

Kürzlich hochgeladen

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 

Kürzlich hochgeladen (11)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 

Conversion Entre Tipos Leccion 4

  • 1. Conversión entre Tipos La conversión entre tipos permite comparar y copiar valores entre diferentes tipos. En esta lección describiremos como convertir un tipo dado en otro. Conversión en VB y C# Existen 2 tipos de conversiones entre tipos:  Conversión implícita: Son aquellas conversiones entre tipos que no requieren una sintaxis especial en el código. Este tipo de conversiones se emplean cuando tipo destino puede acomodar todos los valores posibles del tipo origen. Visual Basic por defecto permite la conversión implícita entre tipos independientemente si el tipo destino puede acomodar todos los valores del tipo origen. C# prohíbe las conversiones implícitas que causen una pérdida de rango o precisión. Ejemplos de conversiones implícitas: C# int i = 3; double d = 3.1416; d = i; // ahora d = 3 Visual Basic Dim i as Integer = 1 Dim d as Double = 3.1416 d = i ' ahora d = 3  Conversión explícita: Son aquellas conversiones entre tipos que requieren el uso de palabras reservadas del lenguaje o de de tipos del framework que ayudan en la conversión. Este tipo de conversiones se emplean cuando el tipo destino no puede acomodar todos los posibles valores del tipo origen y por lo tanto se requiere expresar explícitamente en el código esa intención. Las conversiones explícitas de emplean cuando se conoce de antemano que el valor origen puede ser convertido al tipo destino sin pérdida o error. Existen muchas maneras de realizar conversiones explícitas, entre ellas:
  • 2. A nivel de .Net Framework, esto es independiente del lenguaje elegido System.Convert Provee métodos que permiten la conversión entre tipos que implementan la interface System.IConvertible. Todos los tipos de datos del Framework implementan IConvertible. tipo.ToString Para convertir el valor de una instancia a una cadena que lo representa. Donde “tipo” es cualquier tipo de dato del framework o definido por el usuario que sobrecarga la función “ToString”. Si la conversión no es posible se lanza una excepción. tipo.Parse Para convertir una representación en cadena a un tipo específico. Donde “tipo” es cualquier tipo de dato básico del framework. Si la conversión no es posible se lanza una excepción. tipo.TryParse y tipo.TryParseExact Es similar al método “Parse”, sólo que no lanza una excepción si la conversión falla sino que devuelve el valor booleano false. En C# (tipo) expresión Los paréntesis se pueden utilizar para especificar conversiones de tipos. Donde “tipo” es el tipo al que deseamos convertir, que tiene definido operadores de conversión. De esta manera se invoca explícitamente al operador de conversión de un tipo a otro. La operación de conversión falla y genera un error en tiempo de compilación si no hay un operador de conversión definido entre los tipos que se desea convertir. as La palabra reservada “as” se utiliza para realizar conversiones entre tipos por referencia compatibles, si la conversión no es posible se retorna null en vez de lanzar una excepción.
  • 3. En VB CType(expresión, tipo) Es análogo al operador de conversión (tipo) expresión de C#. CBool(expresión), CInt(expresión), CStr(expresión), etc. Permiten la conversión entre los diferentes tipos básicos de Visual Basic. Estas funciones con compiladas en línea, proporcionando una mejor performance. Se recomienda utilizar estas funciones de conversión de tipos de Visual Basic en preferencia a las que proporciona .Net Framework con el método ToString() o la Clase Convert, ya que estas funciones están diseñadas para una interacción óptima con Visual Basic. DirectCast(expresión, tipo) Es similar a CType pero sólo opera en tipos por referencia. Para que la conversión sea exitosa se requiere una relación de herencia o de implementación entre los tipos de datos de los argumentos de lo contrario se lanza una excepción. Lo que significa que un tipo debe heredar o implementar el otro. TryCast(expresión, tipo) Es exactamente igual a DirectCast salvo que en vez de lanzar una excepción cuando la conversión no es posible devuelve Nothing. Boxing y Unboxing Boxing: Convierte un tipo por valor a un tipo por referencia. Cuando necesitamos tratar a tipos por valor como enteros, booleanos o estructuras como si fueran referencias se construye un objeto del tipo System.Object y se copia el valor a esa referencia. Boxing ocurre implícitamente cuando un tipo por valor es pasado como parámetro a un tipo object. Por ello es recomendable no diseñar métodos que acepten parámetros del tipo System.Object sino crear tantas sobrecargas del método como con tipos por valor a utilizar. La operación de Boxing, también ocurre implícitamente cuando se llaman a métodos virtuales de una estructura que hereda de System.Object, como por ejemplo el método ToString(), GetHash() y Equals. Por ello se recomienda sobrecargar estos métodos cuando se definen estructuras o nuevos tipos por valor. C# int p = 123; object o; o = p; // Boxing implícito o = (object) p; // Boxing explícito
  • 4. Visual Basic Dim p as Integer = 123; Dim o as Object; o = CType(p, Object) ' Boxing explícito Unboxing: Convierte un tipo por referencia a un tipo por valor. Ocurre cuando se asigna una referencia de un objeto a un tipo por valor. El valor almacenado en la referencia de objeto es copiado en la ubicación que ocupa el tipo por valor. C# int p; p = (int) o; // Unboxing explícito Visual Basic Dim p as Integer p = CType(o, Integer) ' Unboxing explícito La operación de Unboxing debe ser realizada con un operador de conversión explícito, si el valor almacenado en la referencia de objeto no es del mismo tipo del que se especifica en la conversión se generará una excepción. Consejos: Evitar aceptar los argumentos del tipo Object en métodos, para ello se recomienda el uso de Generics ó de crear varias sobrecargas del método en cuestión que acepte varios tipos por valor. Implementando Conversiones en Tipos Definidos por el Usuario Cuando creamos una aplicación muchas veces definimos tipos de datos propios para facilitar el manejo de información por parte de la misma; ahora bien, para lograr una integración óptima con el framework, debemos de tener en cuenta detalles como el manejo de conversión entre tipos y otras funcionalidades que pueden ser logradas a través de la sobre escritura de métodos. En este caso vamos a seguir concentrados en el tema de interés que hemos venido estudiando: las conversiones. Hay varias formas de implementar –o habilitar en su defecto- las conversiones en tipos que han sido definidos por uno mismo, y la técnica que escojamos dependerá del tipo de conversión que queramos hacer. Las formas más comunes se enlistan a continuación:  Podemos definir los operadores de conversión para simplificar las conversiones de ampliación o reducción entre tipos numéricos. (Recordemos las densidades de los conjuntos que son representados por tipos int o float por ejemplo)  Veamos ahora la sobre escritura de los métodos toString y Parse para conversión entre nuestra clase y la clase String. Esta es una muy buena práctica dado que como programadores asumimos
  • 5. que cada objeto tiene bien definida la forma de presentarse como String, a pesar de que generalmente no se implemente y quedamos con el nombre de la clase únicamente.  Adicionalmente podemos implementar la interface System.IConvertible para habilitar las conversiones utilizando el método System.Convert. Ampliando un poco más sobre operadores de conversión, los podemos definir como los que nos van a permitir asignar de otros tipos hacia el nuestro y viceversa directamente. Ahora bien, usaremos la forma implícita si estamos ampliando dado que no vamos a perder precisión, y usaremos la forma explícita cuando por el otro lado se puede dar perdida de precisión. (Para visualizar mejor este concepto, pensemos en que creamos un tipo de datos llamado ”Fracción”, que nos permite guardar números fraccionales en términos de numerador y denominador. Si queremos convertir de nuestro tipo de datos a un tipo de datos float por ejemplo, no hay perdida de precisión -técnicamente-, mientras si lo pasamos a un Integer es todo lo contrario) Pensando ahora en la sobre escritura de métodos, simplemente implementamos la interface IConvertible y dejamos que el IDE implemente automáticamente la interface (él agregará métodos según la interface, de los cuales modificamos los que sean relevantes para nuestro tipo de datos. Ejemplo: probablemente el método ToDateTime sea irrelevante para nuestra clase Fracción).