Tarea
Dado que a C# se le asignan tipos estáticos en tiempo de compilación, después de declarar una variable, no se puede volver a declarar ni tampoco utilizar para almacenar valores de otro tipo, a menos que dicho tipo pueda convertirse en el tipo de la variable. Por ejemplo, no existe conversión de un entero a una cadena arbitraria cualquiera. Por lo tanto, después dedeclarar i como entero, no puede asignarle la cadena "Hello", como se muestra en el código siguiente.
int i;
i = "Hello"; // Error: "Cannot implicitly convert type 'string' to 'int'"
Sin embargo, en ocasiones puede que sea necesario copiar un valor en un parámetro de método o variable de otro tipo. Por ejemplo, puede que tenga una variable de tipo entero que deba pasar a un método cuyoparámetro es de tipo double. Estos tipos de operaciones se denominan conversiones de tipos. En C#, puede realizar los siguientes tipos de conversiones:
• Conversiones implícitas: no se requiere una sintaxis especial porque la conversión se realiza con seguridad de tipos y no se perderán datos. Entre los ejemplos se incluyen las conversiones de tipos enteros de menor a mayor y las conversiones declases derivadas en clases base.
• Conversiones explícitas (conversiones de tipos): las conversiones explícitas requieren un operador de conversión. Las variables de origen y destino son compatibles, pero existe el riesgo de perder datos debido a que el tipo de la variable de destino es más pequeño que (o es una clase base de) la variable de origen.
• Conversiones definidas por elusuario: las conversiones definidas por el usuario se realizan a través de métodos especiales que puede definir para habilitar las conversiones explícitas e implícitas entre tipos personalizados que no tienen una relación de clase base-clase derivada. Para obtener más información, vea Operadores de conversión (Guía de programación de C#).
• Conversiones con clases auxiliares: para realizarconversiones entre tipos no compatibles, como los enteros y los objetos System..::.DateTime, o bien cadenas hexadecimales y matrices de bytes, puede utilizar la clase System..::.BitConverter, la clase System..::.Convert y los métodos Parse de los tipos numéricos integrados, como Int32..::.Parse..
[pic]
Conversiones implícitas
En los tipos numéricos integrados, puede realizarse unaconversión implícita cuando el valor que se va a almacenar puede ajustarse a la variable sin necesidad de truncamiento o redondeo. Por ejemplo, una variable de tipo longlong (Referencia de C#) (entero de 8 bytes) puede almacenar cualquier valor que pueda almacenar a su vez un elemento intint (Referencia de C#) (4 bytes en un equipo de 32 bits). En el ejemplo siguiente, el compilador convierte implícitamenteel valor de la derecha en un tipo long antes de asignarlo a bigNum.
// Implicit conversion. num long can
// hold any value an int can hold, and more!
int num = 2147483647;
long bigNum = num;
Tabla de conversiones numéricas implícitas
La tabla siguiente muestra las conversiones numéricas implícitas predefinidas. Las conversiones implícitas se pueden dar en muchas ocasiones, incluidasla invocación a métodos y las instrucciones de asignación.
|De |A |
|sbyte |short, int, long, float, double o decimal |
|byte |short, ushort, int, uint, long, ulong, float, double o decimal|
|short |int, long, float, double o decimal |
|ushort |int, uint, long, ulong, float, double o decimal |
|int |long, float, double o decimal |...
Regístrate para leer el documento completo.