miércoles, 20 de julio de 2016

Otros Mecanismos de Conversión en C# - Parte 3/4: Convertidores de Tipos

Índice

1. Introducción
2. Palabras Clave
3. Clase TypeConverter
4. Ejemplo de Uso Básico
5. Conclusiones
6. Literatura & Enlaces

1. Introducción

Tercera parte de la serie de artículos Otros Mecanismos de Conversión en C#. En esta ocasión se estudia la clase TypeConverter: esta clase provee un mecanismo unificado para la conversión de valores de tipos de datos a otros tipos de datos. Se muestra, además, su uso en aplicaciones concretas como el estándar XAML.

2. Palabras Clave

  • Convertidor de tipo
  • TypeConverter
  • XAML

3. Clase TypeConverter

La clase TypeConverter (namespace System.ComponentModel) provee un mecanismo unificado requerido para la conversión de valores de tipos de datos a otros tipos de datos ("TypeConverter Class", 2016). Esta clase comprende la subclase para todos los convertidores de tipos disponibles en Microsoft .NET Framework.

En este framework se cuenta con más de 100 convertidores de tipo. En la Figura 1 se enumeran algunos de éstos: 
Jerarquía de herencia de TypeConverter
Figura 1. Jerarquía de herencia TypeConverter ("TypeConverter Class", 2016).
Existen convertidores de tipo que cubren la conversión de valores como colores, imágenes, URIs, etc. (Albahari, 2012). Nótese cómo al final final de cada convertidor de tipo se agrega la palabra Converter para referirse elementos de programa de esta clase; esto es una convención de nombres.

Por otro lado, un convertidor de tipo se diferencia de un proveedor de formato en el alcance de conversión, es decir que su diseño va más allá de la manipulación de valores de tipo.

Otra de las funcionalidades interesantes es proveer servicios para operaciones en tiempo de diseño; por ejemplo: agregación de elementos auto-generados para listas desplegables (Albahari, 2012).

4. Ejemplo de Uso Básico

Para la obtención de una instancia TypeConverter, basta con la invocar al método static TypeDescriptor.GetConverter. Por ejemplo, las siguientes líneas de código fuente C# obtienen el convertidor de tipo para el tipo de dato System.Drawing.Color

TypeConverter tipoColor = TypeDescriptor.GetConverter(typeof(Color));

¿Cuál es el convertidor de tipo de la variable tipoColor? Con el depurador de LINQPad este es el resultado que se obtiene: 
Tipo concreto de la variable tipoColor
Figura 2. Tipo concreto de la variable tipoColor: Ssytem.Drawing.ColorConverter.
Esto resulta útil, por ejemplo, para aplicaciones de .NET como ASP.NET sobre Visual Studio: en la ventana de Propiedades de este IDE el programador puede asignar un valor para la propiedad Color de uno de los controles que integra la interfaz gráfica de usuario a través del nombre de uno de los colores -e.g., Red, Blue, Yellow- y el editor se encargará de realizar la conversión del tipo por sus propios mecanismos recurriendo al uso de convertidores de tipo. Este mismo concepto aplica para otras tecnologías de diseño de interfaces gráficas de usuario como WPF (Windows Presentation Foundation).

En la siguiente parte demostrativa se muestra cómo lleva a cabo esto a través del método ConvertFromString del objeto TypeConverter recién creado: 

// Conversión de colores:
Color beige = (Color) tipoColor.ConvertFromString("Beige");
Color rojo = (Color) tipoColor.ConvertFromString("#FF0000");
Color window = (Color) tipoColor.ConvertFromString("Window");

5. Conclusiones

Se ha explorado otro de los mecanismos de conversión disponible en C#: los convertidores de tipo. Se comprendió que esta categoría de convertidores permite al programador convertir valores de tipos de datos a otros tipos de datos; además, se reconoció su utilidad en aplicaciones concretas de .NET Framework.

La última parte de esta serie explica el uso de la clase BitConverter.

6. Literatura & Enlaces

Albahari, J., Albahari, B. (2012). C# 5.0 in a Nutshell. United States: O'Reilly Media.
TypeConverter Class (System.ComponentModel) (2016, julio 20). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter(v=vs.110).aspx


O

No hay comentarios:

Publicar un comentario

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