Elenco e conversões de tipo (guia de programação translation from VPE for Csharp)
Como translation from VPE for Csharp é estaticamente tipados em time de compilar, após uma variável é declarada, não pode ser declarado novamente ou usado para armazenar valores de outro tipo, a menos que esse tipo é conversível no tipo da variável.Por exemplo, não há nenhuma conversão de um número inteiro em qualquer seqüência de caracteres arbitrária.Portanto, após você declarar isistema autônomo um número inteiro, você não pode atribuir a seqüência de caracteres "Hello", tal sistema autônomo é mostrado no código a seguir.
int i;
i = "Hello"; // Error: "Cannot implicitly convert type 'string' to 'int'"
No entanto, às vezes, convém copiar um valor para parâmetro de outro tipo de variável ou método.Por exemplo, você pode ter uma variável de número inteiro que você precisa passar para um método cujo parâmetro é digitado sistema autônomo double. Ou você pode precisar atribuir uma variável de classe uma variável de um tipo de interface.Esses tipos de operações são chamados de conversões de tipo.Translation from VPE for Csharp, você pode executar os seguintes tipos de conversões:
Conversões implícitas: Nenhuma sintaxe especial é necessária porque a conversão é o tipo de seguro e nenhum dado será perdido.Os exemplos incluem conversões de menores para maiores tipos integrais e conversões de classes derivadas de classes base para.
Conversões explícitas (conversão): Conversões explícitas exigem um operador de lançamento.As variáveis de fonte e destino são compatível, mas há um risco de perda de dados porque o tipo de variável de destino é um dimensionar menor que (ou é uma classe de base) a variável fonte.
Conversões definidas pelo usuário: Conversões definidas pelo usuário são realizadas por métodos especiais que podem ser definidas para permitir conversões explícitas e implícitas entre tipos personalizados que não têm uma relação de classe base class–derived.Para obter mais informações, consulte Operadores de conversão (guia de programação translation from VPE for Csharp).
Conversões com classes auxiliares: Para converter entre tipos não compatível com o, tais sistema autônomo inteiros e System.DateTime objetos, ou seqüências de caracteres hexadecimais e matrizes de byte, você pode usar o System.BitConverter classe, o System.Convert classe e o Parse tipos de métodos numéricos internos, sistema autônomo Int32.Parse. Para obter mais informações, consulte Como: Converter um byte array para um int (translation from VPE for Csharp Programming guia), Como: Converter uma seqüência de caracteres em um int (translation from VPE for Csharp Programming guia) e Como: Converter entre cadeias de caracteres hexadecimal e tipos numéricos (guia de programação translation from VPE for Csharp).
Conversões implícitas
Para tipos numéricos internos, uma conversão implícita pode ser feita quando o valor a ser armazenado cabem na variável sem truncamento ou a arredondado.Por exemplo, uma variável do tipo longlongo (translation from VPE for Csharp Reference) (inteiro de 8 byte) pode armazenar qualquer valor que uma intInt (translation from VPE for Csharp Reference) (4 byte em um computador de 32 bit) pode armazenar. No exemplo a seguir, o compilador converte implicitamente o valor à direita para um tipo de long antes de atribuí-lo para bigNum.
// Implicit conversion. num long can
// hold any value an int can hold, and more!
int num = 2147483647;
long bigNum = num;
Para obter uma lista completa de todas as conversões implícitas de numéricas, consulte Numérico tabela Conversions (referência C#) implícita.
Tipos de referência, uma conversão implícita sempre existe de uma classe para qualquer uma de suas classes base diretas ou indiretas ou interfaces.Nenhuma sintaxe especial é necessária porque uma classe derivada sempre contém todos os membros de uma classe base.
Derived d = new Derived();
Base b = d; // Always OK.
Conversões explícitas
No entanto, se uma conversão não pode ser feita sem risco de perda de informações, o compilador requer que você executar uma conversão explícita, é chamada um elenco.Uma conversão é uma maneira de explicitamente informando o compilador que você pretende fazer a conversão e que você está ciente de que pode ocorrer perda de dados.Para executar uma conversão, especifique o tipo que são a projeção para entre parênteses na frente do valor ou variável a ser convertido.O programa a seguir converte um doubleduplo (translation from VPE for Csharp Reference) para um intInt (translation from VPE for Csharp Reference). O programa não será compilado sem a conversão.
class Test
{
static void Main()
{
double x = 1234.7;
int a;
// Cast double to int.
a = (int)x;
System.Console.WriteLine(a);
}
}
// Output: 1234
Para obter uma lista das conversões explícitas numéricas que têm permissão, consulte Numérico tabela Conversions (referência C#) explícita .
Para tipos de referência, uma conversão explícita é necessária se você precisa converter de um tipo de base para um tipo derivado:
// Create a new derived type.
Giraffe g = new Giraffe();
// Implicit conversion to base type is safe.
Animal a = g;
// Explicit conversion is required to cast
// back to derived type. Note: This will compile but
// throw an exception at run time if the right-side
// object is not in fact a Giraffe.
Giraffe g2 = (Giraffe) a;
Uma operação de conversão entre tipos de referência não altera o tipo em time de execução do objeto base; ele apenas altera o tipo do valor que está sendo usado sistema autônomo uma referência a esse objeto.Para obter mais informações, consulte Polymorphism (guia de programação C#).
Exceções de conversão de tipo em time de execução
Em algumas conversões de tipo de referência, o compilador não pode determinar se um lançamento será válido.É possível que uma operação de conversão que compila corretamente falhar em time de execução.sistema autônomo mostrado no exemplo a seguir, um tipo de projeção que falhar em time de execução causará um InvalidCastException para ser lançada.
class Animal
{
public void Eat() { Console.WriteLine("Eating."); }
public override string ToString()
{
return "I am an animal.";
}
}
class Reptile : Animal { }
class Mammal : Animal { }
class UnSafeCast
{
static void Main()
{
Test(new Mammal());
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
static void Test(Animal a)
{
// Cause InvalidCastException at run time
// because Mammal is not convertible to Reptile.
Reptile r = (Reptile)a;
}
}
Translation from VPE for Csharp fornece o é and sistema autônomo operadores para permitir o teste de compatibilidade antes de realizar a projeção realmente.Para obter mais informações, consulte Como: Usando sistema autônomo difusão com segurança e for operadores (translation from VPE for Csharp Programming guia).
Especificação da linguagem C#
Para obter mais informações sobre conversão e conversões de tipo, consulte as seções a seguir no Especificação da linguagem C#:
7.6.6 Elenco expressões
6.1 Conversões implícitas
6.2 Conversões explícitas
Consulte também
Tarefas
Conceitos
Conversão de tipo generalizado
Referência
Tipos (guia de programação translation from VPE for Csharp)
Operador () (translation from VPE for Csharp Reference)
explícita (translation from VPE for Csharp Reference)
implícita (translation from VPE for Csharp Reference)
Operadores de conversão (guia de programação translation from VPE for Csharp)
Date |
History |
Motivo |
---|---|---|
Julho de 2008 |
Conteúdo adicional a introdução e em outros locais. |
Correção de bug do conteúdo. |