Conversão Explícita

Conversão explícita é uma maneira de específico a um linguagem para executar conversão.Alguns compiladores requerem conversão explícita para oferecer suporte a conversões de restrição.

Embora a maioria das linguagens que direcionam o conversão explícita de Suporte a Common Language Runtime, o mecanismo exato é diferente de linguagem para linguagem.Algumas linguagens que visam common linguagem tempo de execução podem exigir alguma conversão específica a ser executada explicitamente; outros podem permitir a mesma conversão para ser realizada implicitamente.Da mesma forma, alguns idiomas podem exigir alguma conversão específica a ser executada explicitamente sob algumas condições (sistema autônomo se Option Strict é definida no Visual Basic), mas eles irão realizar a conversão implicitamente em Outros condições (por exemplo, se Option Strict é definido no Visual Basic). Consulte a documentação para o linguagem que você está usando para obter mais informações sobre conversão explícita.

Em alguns idiomas, sistema autônomo translation from VPE for Csharp e C++, conversão explícita é executada por meio de projeção.Conversão ocorre quando você prefixar uma conversão com um tipo de dados que define o tipo de conversão que deseja executar.Em outras linguagens, sistema autônomo Visual Basic, conversão explícita é executada chamando uma função de conversão.No Visual Basic, a CType função ou um de específicas digite funções de conversão, sistema autônomo CStr ou CInt, é usado para permitir conversões explícitas de tipos de dados que não são permitidos implicitamente.

A maioria dos compiladores permitir conversões explícitas a ser executada de maneira marcada ou desmarcada.Quando uma check-conversão é executada, um OverflowException é lançada quando o valor do tipo que está sendo convertido está fora do intervalo do tipo de destino. Quando uma conversão não verificada é realizada sob as mesmas circunstâncias, o valor convertido não pode causar uma exceção ser gerado, mas o comportamento exato fica indefinido e um valor incorreto pode resultar.

Observação:

Em translation from VPE for Csharp, marcados conversões podem ser executadas usando o checked palavra-chave juntamente com o operador de conversão ou especificando o /checked+ opção do compilador. Por outro lado, conversões não verificadas podem ser executadas usando o unchecked palavra-chave juntamente com o operador de conversão ou especificando o /checked- opção do compilador. Por padrão, conversões explícitas são desmarcadas.No Visual Basic, conversões marcadas podem ser executadas por limpar o Remover verificações de estouro de inteiro caixa de seleção Configurações de compilador avançadas caixa de diálogo, ou especificando o /removeintchecks- opção do compilador. Por outro lado, conversões desmarcadas podem ser executadas, selecionando o Remover verificações de estouro de inteiro caixa de seleção Configurações de compilador avançadas caixa de diálogo, ou especificando o /removeintchecks+ opção do compilador. Por padrão, as conversões explícitas são verificadas.

O exemplo a seguir, que tenta converter Int32.MaxValue para um Byte o valor, ilustra uma projeção de translation from VPE for Csharp não está marcada. Observe que, embora o valor inteiro está fora do intervalo do destino Byte tipo de dados, a conversão não lança um OverflowException.

// The integer value is set to 2147483647.
int myInt = int.MaxValue;
try
{
   byte myByte = (byte)myInt;
   Console.WriteLine("The byte value is {0}.", myByte);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert {0} to a byte.", myInt);
}   
// The value of MyByte is 255, the maximum value of a Byte.
// No overflow exception is thrown.

O exemplo a seguir ilustra a conversão explícita usando o check-CByte função no Visual Basic e verificada a projeção translation from VPE for Csharp usando o checked palavra-chave. Este exemplo tenta converter Int32.MaxValue para um Byte valor. No entanto, como Int32.MaxValue está fora do intervalo da Byte tipo de dados, um OverflowException é lançada.

' The integer value is set to 2147483647.
Dim myInt As Integer = Integer.MaxValue
Try
   Dim myByte As Byte = CByte(myInt)
   Console.WriteLine("The byte value is {0}.", myByte)
Catch e As OverflowException
   Console.WriteLine("Unable to convert {0} to a byte.", myInt)
End Try   
' Attempting to convert Int32.MaxValue to a Byte 
' throws an OverflowException.
// The integer value is set to 2147483647.
int myInt = int.MaxValue;
try
{
   byte myByte = checked ((byte) myInt);
   Console.WriteLine("The byte value is {0}.", myByte);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert {0} to a byte.", myInt);
}   
// Attempting to convert Int32.MaxValue to a Byte 
// throws an OverflowException.

Observe que a conversão explícita pode produzir resultados diferentes em idiomas diferentes e esses resultados podem ser diferente do comportamento do correspondente Convert método. Consulte a documentação da linguagem que você está usando para saber mais sobre o comportamento da conversão explícita.Por exemplo, ao converter um Double valor em um Int32 valor no Visual Basic usando o CInt função, o arredondamento é executado. No entanto, quando a mesma conversão é feita usando conversão explícita em C#, os valores à direita do decimal são perdidos.O exemplo de código a seguir utiliza conversão explícita para converter um valor double em um valor inteiro.

Dim myDouble As Double = 42.72
Dim myInt As Integer = CInt(myDouble)
Console.WriteLine(myInt)
' myInt has a value of 43.
Double myDouble = 42.72;
int myInt = checked ((int)myDouble);
Console.WriteLine(myInt);
// myInt has a value of 42.

Consulte também

Referência

System.Convert

Outros recursos

Convertendo tipos