martes, 2 de julio de 2013

Conversiones en C#

Tabla de Contenido

0. Introducción
1. Conversión en C#
2. Conversión Implícita
3. Conversión Explícita
4. Contraste de Tipos de Conversión
5. Consideraciones Finales
6. Conclusiones
7. Palabras Clave
8. Literatura & Enlaces

0. Introducción

Los principios de ingeniería de software a los que debe someterse un lenguaje de programación involucran la capacidad de conversión de tipos de datos compatibles (predefinidos y personalizados). C# no se queda atrás y permite este tipo de operaciones básicas. En este artículo haremos un repaso rápido de conversión de tipos de datos y descubriremos las dos clases de conversión disponibles en el lenguaje: implícita y explícita.

1. Conversión en C#

El proceso de conversión involucra la tarea de crear un nuevo valor a partir de uno ya existente. El valor que se desee convertir puede ser una literal, por ejemplo, 5.0"Hola Mundo"'H' o el valor contenido en un identificador de un tipo específico, e.g.miVariablemiObjetofechaActual. Es un proceso que resulta sencillo pero que depende de reglas establecidas en las clases de conversiones (implícita y explícita) que pueden ocurrir.
Clases de conversión en C#
Figura 1. Clases de conversión en C#.

2. Conversión Implícita

La conversión implícita consiste en convertir un tipo de dato a su representación equivalente en otro tipo de dato compatible. Este tipo de conversión no requiere que especificamos ninguna construcción (palabras reservadas, funciones) de C# para que el compilador la lleve a cabo; basta con especificar los valores, variables, llamadas a funciones, etc., dentro de la expresión, para que de esta forma se asigne el valor de la evaluación en la variable, constante, argumento de función.

A continuación se muestra un ejemplo sencillo de esta clase de conversión:

int x = 12345; // int es un entero de 32 bits
long y = x; // Conversión implícita a entero de 64 bits

Debido a la doble capacidad que ofrece el tipo de dato predefinido long, la conversión se lleva a cabo sin ningún problema.

Según [1], las conversiones implícitas se realizan cuando las dos siguientes condiciones son verdaderas:
  • El compilador garantiza que las conversiones se lleven a cabo de manera satisfactoria.
  • No hay pérdida de información.

3. Conversión Explícita

La conversión explícita consiste en convertir tipos de datos con la especificación explícita del tipo de dato destino de la conversión.

Veamos el siguiente ejemplo para hacer una distinción inmediata:

int x = 12345; // int es un entero de 32 bits
long y = x; // Conversión implícita a entero de 64 bits
short z = (short)x; // Conversión explícita a entero de 16 bits

Observemos que para la segunda conversión, short z = (short)x;, fue necesario especificar de forma explícita (short)x antes de asignar el valor de la variable x a z (tipo short).

Finalmente, para realizar una conversión explícita se debe cumplir las dos siguientes condiciones:
  • El compilador no garantiza que la conversión siempre sea satisfactoria.
  • Puede ocurrir pérdida de información durante la conversión.

4. Contraste de Tipos de Conversión

Ahora veamos este ejemplo utilizando variables tipo por referencia para entender el comportamiento de los tipos de conversión:

Perro p1 = new Perro("Tony");
Animal a = p; // Conversión implícita
Perro p2 = (Perro)a; // Conversión explícita

Debido a la relación de que un perro es un animal podemos hacer la conversión implícita (Animal a = p;), mientras que no es posible la relación inversa un animal es un perro, entonces se recurre al modo de conversión explícito en: Perro p2 = (Perro)a;.

5. Consideraciones Finales

A diferencia de la conversión implícita, la conversión explícita requiere del uso del operador de casting.

Por otro lado, debemos tener en cuenta los siguientes eventos durante el proceso de compilación y el uso de genéricos en conversiones:
  • Según [1]: Si el compilador determina que una conversión siempre fallará, ambas clases de conversiones son prohibidas.
  • Ídem [1]:  En conversiones que involucren genéricos (más adelante exploraremos varios artículos acerca de este tema) se pueden generar problemas de conversión en ciertas circunstancias.

6. Conclusiones

Hemos visto cómo hacer algunas conversiones de tipos (int a long) sencillas. Exploramos y explicamos las clases de conversiones implícita e implícita, junto con ejemplos básicos. Al final, resaltamos algunas consideraciones acerca del uso de conversiones en artículos C# que veremos más adelante.

7. Palabras Clave

  • Cast
  • Compilador
  • Conversión explícita
  • Conversión implícita
  • Tipo de dato

8. Literatura & Enlaces

[1] C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.
[2] Casting and Type Conversions (C# Programming Guide) - http://msdn.microsoft.com/en-us/library/ms173105.aspx
V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.