Utilizar operadores de conversión (Guía de programación de C#)
Puede usar los operadores de conversión implicit, que son más fáciles de usar, o los operadores de conversión explicit, que indican claramente a cualquiera que lea el código que está convirtiendo un tipo. En este tema se muestran ambos tipos de operadores de conversión.
Nota |
---|
Para obtener más información sobre las conversiones de tipos simples, vea Cómo: Convertir una cadena en un número (Guía de programación de C#), Cómo: Convertir una matriz de bytes en un valor int (Guía de programación de C#), Cómo: Convertir cadenas hexadecimales en tipos numéricos (Guía de programación de C#) o Convert. |
Ejemplo
Este es un ejemplo de un operador de conversión explícita. Este operador convierte el tipo Byte en un tipo de valor denominado Digit. Como no todos los bytes se pueden convertir en valores de tipo digit, la conversión es explícita, lo que significa que se debe usar una conversión, como se muestra en el método Main.
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static explicit operator Digit(byte b) // explicit byte to digit conversion operator
{
Digit d = new Digit(b); // explicit conversion
System.Console.WriteLine("Conversion occurred.");
return d;
}
}
class TestExplicitConversion
{
static void Main()
{
try
{
byte b = 3;
Digit d = (Digit)b; // explicit conversion
}
catch (System.Exception e)
{
System.Console.WriteLine("{0} Exception caught.", e);
}
}
}
// Output: Conversion occurred.
En este ejemplo se muestra un operador de conversión implícita mediante la definición de un operador de conversión que deshace lo que hizo el ejemplo anterior: convierte una clase de valor denominada Digit en el tipo entero Byte. Dado que cualquier dígito se puede convertir en Byte, no hay ninguna necesidad de obligar a los usuarios a que definan explícitamente la conversión.
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static implicit operator byte(Digit d) // implicit digit to byte conversion operator
{
System.Console.WriteLine("conversion occurred");
return d.value; // implicit conversion
}
}
class TestImplicitConversion
{
static void Main()
{
Digit d = new Digit(3);
byte b = d; // implicit conversion -- no cast needed
}
}
// Output: Conversion occurred.
Vea también
Referencia
Operadores de conversión (Guía de programación de C#)