Tabla de Contenido
0. Introducción1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código Fuente C#
4.1 Palabra
4.2 Dígito
4.3 Celsius y Fahrenheit
5. Conclusiones
6. Glosario
7. Enlaces & Literatura
0. Introducción
Conocemos que C# cuenta con diferentes tipos de datos integrados
(i.e., byte, short, int, long, &c.), que por supuesto no requieren del uso
del operador new para su uso, algo análogo ocurre con el tipo por referencia string (i.e.,
string cadena = "Cadena de caracteres") obsérvese la exclusión del operador new en la expresión izquierda. Esto es
posible gracias al uso de los operadores de conversión implict y explicit que
forman parte de las construcciones estándar del lenguaje. Veamos cómo funciona
todo esto a través de esta receta.
1. Problema
Tenemos un conjunto de clases integrales de nuestra solución software, muchas de ellas poseen definiciones de datos que permiten ser convertidas a otras clases de objetos o tipos de datos integrados (e.g., numéricos). De momento la conversión se hace de manera implícita exponiendo los valores de las propiedades o usando el esquema de herencia implícito hacia arriba (subtipo a supertipo) del Framework .NET. Se requiere a partir de ahora usar un método alternativo y más intuitivo para permitir conversiones implícitas y explícitas entre tipos definidos por el usuario (programador) y los integrados.
2. Solución
C# cuenta con un par de construcciones sintácticas y semánticas apropiadas para cubrir este requerimiento técnico: implicit [4] y explicit [5]. Éstas dos palabras claves formarán parte de la definición de la firma de los métodos destinados a llevar a las conversiones implícitas y explicitas, respectivamente. Su uso es intuitivo y sencillo como en:
Animal animal = perro; // Conversión implícita
perro = (Perro) animal; // Conversión explícita
3. Discusión de la solución
Veamos la sintaxis general para la declaración de un método de conversión implícito y explícito:
«access specifier» static {implicit|explicit} operator «tipo destino» («tipo origen»)
Conversión explícita:
public static explicit operator Palabra(string texto)
{
return new Palabra() {Texto = texto};
}
Con esta definición en la clase Palabra, podemos realizar la siguiente conversión explícita (tenga en cuenta el uso del operador de casting explícito -(Palabra)- en la expresión de conversión) en código cliente:
Palabra palabra = (Palabra)"Hola";
Conversión implícita:
public static implicit operator Palabra(string texto)
{
return new Palabra() {Texto = texto};
}
Con el operador implicit en esta definición podemos lograr cualquier de estas dos conversiones:
Palabra palabra = (Palabra)"Hola";
Palabra palabra = "Hola";
[Nota: Las declaraciones de conversión implícita y explícita deben tener especificado el modificador static. Además, no está permitida la sobrecarga de operadores de conversión.]
4. Práctica: Código Fuente C#
En los tres ejemplos que viene a continuación se pone de manifiesto la aplicación del concepto de definición de operadores de conversión.
4.1 Palabra
Archivo Palabra.cs:
Compilación:
- csc /target:exe /out:Palabra.exe Palabra.cs
4.2 Dígito
Archivo Digito.cs:
Compilación:
- csc /target:exe /out:Digito.exe .\Digito.cs
4.3 Celsius y Fahrenheit
Archivo CelciusFahrenheit.cs:
Compilación:
> Prueba de ejecución.
- csc /target:exe /out:CelsiusFahrenheit.exe .\CelsiusFahrenheit.cs
> Prueba de ejecución.
[Nota: En [6] y [7] hay otro conjunto de ejemplos interesantes y útiles para la comprensión de este importante tema.]
5. Conclusiones
Los operadores de conversión en C# nos ofrece un alto grado de flexibilidad, que como programadores necesitamos a la hora de pasar una representación lógica a otro (conversión de tipos) de las clases que nosotros mismos creamos. Las herramientas sintácticas para llevar a cabo esta tarea, como vimos, son: implicit y explicit.
6. Glosario
- Celsius
- Conversión
- Explícita
- Fahrenheit
- Implícita
7. Enlaces & Literatura
[1]:
Visual C# 2010 Recipes by Allen Jones and Adam Freeman. Copyright 2010 Allen
Jones and Adam Freeman, 978-1-4302-2525-6.
[2]: Using Conversion Operators (C# Programming Guide) - http://msdn.microsoft.com/en-us/library/85w54y0a.aspx
[3]:
Conversion Operators (C# Programming Guide) - http://msdn.microsoft.com/en-us/library/09479473.aspx
[4]:
implicit (C# Reference) - http://msdn.microsoft.com/en-us/library/z5z9kes2.aspx
[5]:
explicit (C# Reference) - http://msdn.microsoft.com/en-us/library/xhbhezf4.aspx
[6]:
Operator Overloading with Implicit and Explicit Casts in C# - http://www.codeproject.com/Articles/93160/Operator-Overloading-with-Implicit-and-Explicit-Ca
[7]:
Understanding Implicit Operator Overloading in C# - http://www.codeproject.com/Articles/15191/Understanding-Implicit-Operator-Overloading-in-C
M
No hay comentarios:
Publicar un comentario
Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.