Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um tipo definido pelo usuário pode definir uma conversão implícita ou explícita personalizada de ou para outro tipo, desde que não exista uma conversão padrão entre os mesmos dois tipos. As conversões implícitas não exigem sintaxe especial para serem invocadas e podem ocorrer em várias situações, por exemplo, em atribuições e invocações de métodos. Conversões implícitas em C# predefinidas sempre são bem-sucedidas e nunca lançam uma exceção. As conversões implícitas definidas pelo usuário também devem se comportar dessa maneira. Se uma conversão personalizada puder gerar uma exceção ou perder informações, defina-a como uma conversão explícita.
Os operadores is e as não consideram conversões definidas pelo usuário. Use uma expressão de conversão para invocar uma conversão explícita definida pelo usuário.
Use as operator palavras-chave e ou implicitexplicit para definir uma conversão implícita ou explícita, respectivamente. O tipo que define uma conversão deve ser um tipo de origem ou um tipo de destino dessa conversão. Uma conversão entre dois tipos definidos pelo usuário pode ser definida em qualquer um dos dois tipos.
O exemplo a seguir demonstra como definir uma conversão implícita e 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
}
}
Podes definir operadores de conversão explícitos verificados . Para obter mais informações, consulte a seção Operadores verificados definidos pelo usuário do artigo Operadores aritméticos.
Você também usa a operator palavra-chave para sobrecarregar um operador C# predefinido. Para obter mais informações, consulte Sobrecarga do operador.
Especificação da linguagem C#
Para obter mais informações, consulte as seguintes seções da especificação da linguagem C#:
- Operadores de conversão
- Conversões definidas pelo usuário
- Conversões implícitas
- Conversões explícitas