viernes, 17 de septiembre de 2010

Conversión implícita de tipos

Es común escribir nuevas clases que expandan a las básicas del lenguaje.

Uno de los problemas que nos podemos encontrar cuando hacemos esto es la conversión de tipos.

Si por ejemplo creamos una nueva clase para manejar cadenas, el código se llenará rápidamente de castings para convertir las cadenas nativas del lenguaje a nuestra implementación. Esto ocurre sobre todo en lenguajes fuertemente tipados.

C# provee una solución bastante elegante, la conversión implícita de tipos.

Para mostrar el uso de esta característica se muestra una clase con dos tipos, una cadena y un entero y sus declaraciones de conversiones implícitas.

public class MyClass
{
private string str { get; set; }
private int number { get; set; }

public static implicit operator MyClass(string s)
{
MyClass ms = new MyClass();
ms.str = s;
return ms;
}

public static implicit operator MyClass(int i)
{
MyClass ms = new MyClass();
ms.number = i;
return ms;
}

public string getStr()
{
return str;
}

public int getNumber()
{
return number;
}
}

Declarando un operador estático, implícito y público se consigue la sintaxis siguiente para la conversión de tipos.

MyClass ms1 = "hello";
MyClass ms2 = 2;

Console.WriteLine(ms1.getStr());
Console.WriteLine(ms2.getNumber());

En el ejemplo se puede ver que no es necesaria ninguna conversión, y se pasan tanto la cadena "hello" como el entero 2 a tipo MyClass.

1 comentarios:

Unknown dijo...

Pon el enlace RSS o ATOM en alguna parte que si no la gente no te puede leer. (Aunque Google Reader si detecte el RSS con la dirección del blog)

Saludos!