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

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

Como: Converter uma seqüência de caracteres em um int (translation from VPE for Csharp Programming guia)

Conceitos

Guia de Programação C#

Conversão de tipo generalizado

Conversão Explícita

Conversão de tipo exportado

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.