Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um tipo definido pelo usuário pode definir uma conversão implícita personalizada ou explícita de ou para outro tipo, desde que não exista uma conversão padrão entre os mesmos dois tipos. Conversões implícitas não exigem sintaxe especial a ser invocada e podem ocorrer em várias situações, por exemplo, em invocações de atribuições e métodos. As conversões implícitas de C# predefinidas sempre são bem-sucedidas e nunca geram 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 implicit
ou explicit
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
}
}
A partir do C# 11, você pode definir operadores de conversão explícita verificados . Saiba mais na 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 de operador.
Especificação da linguagem C#
Para obter mais informações, confira 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