Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un tipo definido por el usuario puede definir una conversión implícita o explícita personalizada de o a otro tipo, siempre que no exista una conversión estándar entre los mismos dos tipos. Las conversiones implícitas no requieren que se invoque una sintaxis especial y se puedan producir en varias situaciones, por ejemplo, en asignaciones e invocaciones de métodos. Las conversiones implícitas predefinidas de C# siempre se realizan correctamente y nunca inician una excepción. Las conversiones implícitas definidas por el usuario también deben comportarse de esa manera. Si una conversión personalizada puede producir una excepción o perder información, definala como una conversión explícita.
Los operadores is y como no tienen en cuenta las conversiones definidas por el usuario. Use una expresión de conversión para invocar una conversión explícita definida por el usuario.
Use las operator palabras clave y o implicitexplicit para definir una conversión implícita o explícita, respectivamente. El tipo que define una conversión debe ser un tipo de origen o un tipo de destino de esa conversión. Una conversión entre dos tipos definidos por el usuario se puede definir en cualquiera de los dos tipos.
En el ejemplo siguiente se muestra cómo definir una conversión implícita y explícita:
using System;
public readonly struct Digit
{
private readonly byte digit;
public Digit(byte digit)
{
if (digit > 9)
{
throw new ArgumentOutOfRangeException(nameof(digit), "Digit cannot be greater than nine.");
}
this.digit = digit;
}
public static implicit operator byte(Digit d) => d.digit;
public static explicit operator Digit(byte b) => new Digit(b);
public override string ToString() => $"{digit}";
}
public static class UserDefinedConversions
{
public static void Main()
{
var d = new Digit(7);
byte number = d;
Console.WriteLine(number); // output: 7
Digit digit = (Digit)number;
Console.WriteLine(digit); // output: 7
}
}
Puede definir operadores de conversión explícitos comprobados . Para obtener más información, consulte la sección Operadores comprobados definidos por el usuario del artículo Operadores aritméticos .
También se usa la operator palabra clave para sobrecargar un operador predefinido de C#. Para obtener más información, consulte Sobrecarga del operador.
Especificación del lenguaje C#
Para más información, vea las secciones siguientes de la Especificación del lenguaje C#:
- Operadores de conversión
- Conversiones definidas por el usuario
- Conversiones implícitas
- Conversiones explícitas