SlideShare une entreprise Scribd logo
1  sur  5
Télécharger pour lire hors ligne
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).

Contenu connexe

Tendances (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
 

Similaire à 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
 

Similaire à 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
 

Plus de 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
 

Plus de 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
 

Dernier

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 

Dernier (13)

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 

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).