Nota
L'accés a aquesta pàgina requereix autorització. Pots provar d'iniciar sessió o canviar de directori.
L'accés a aquesta pàgina requereix autorització. Pots provar de canviar directoris.
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.
La documentación de referencia del lenguaje C# cubre la versión más reciente publicada del lenguaje C#. También contiene documentación inicial sobre las características de las versiones preliminares públicas de la próxima versión del lenguaje.
La documentación identifica cualquier característica introducida por primera vez en las últimas tres versiones del idioma o en las versiones preliminares públicas actuales.
Sugerencia
Para buscar cuándo se introdujo por primera vez una característica en C#, consulte el artículo sobre el historial de versiones del lenguaje C#.
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. Puede definir una conversión entre dos tipos definidos por el usuario 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