safe_cast (Extensões de Componentes C++)

A operação safe_cast retorna a expressão especificada como o tipo especificado, se tiver êxito; caso contrário, lança InvalidCastException.

Todos os tempos de execução

(Não há nenhum comentário sobre este recurso de linguagem que se aplica a todos os tempos de execução).

23b7yy6w.collapse_all(pt-br,VS.110).gifSintaxe

[default]::safe_cast<type-id>(expression)

Tempo de Execução do Windows

safe_cast permite que você altere o tipo de uma expressão especificada.Em situações onde você só espera uma variável ou um parâmetro a ser conversível para um determinado tipo, poderá usar safe_cast sem um bloco try-catch para detectar erros de programação durante o desenvolvimento.Para obter mais informações, consulte Conversão (C++/CX).

23b7yy6w.collapse_all(pt-br,VS.110).gifSintaxe

[default]::safe_cast<type-id>(expression)

23b7yy6w.collapse_all(pt-br,VS.110).gifParâmetros

  • identificação do tipo
    O tipo para o qual a expressão será convertida.Um manipulador para um tipo de referência ou de valor, ou uma referência de controle para um tipo de referência ou de valor.

  • expressão
    Uma expressão avaliada para um manipulador para um tipo de referência ou de valor, ou uma referência de controle para um tipo de referência ou de valor.

23b7yy6w.collapse_all(pt-br,VS.110).gifComentários

safe_cast gera InvalidCastException se não pode converter expressão para o tipo especificado por identificação de tipo.Para capturar InvalidCastException, especifique a opção de compilador /EH (modelo de manipulação de exceção) e use uma instrução try/catch.

23b7yy6w.collapse_all(pt-br,VS.110).gifRequisitos

Opção do compilador: /ZW

23b7yy6w.collapse_all(pt-br,VS.110).gifExemplos

Exemplo

O código a seguir demonstra como usar safe_cast com o Tempo de Execução do Windows.

// safe_cast_ZW.cpp
// compile with: /ZW /EHsc

using namespace default;
using namespace Platform;

interface class I1 {};
interface class I2 {};
interface class I3 {};

ref class X : public I1, public I2 {};

int main(Array<String^>^ args) {
   I1^ i1 = ref new X;
   I2^ i2 = safe_cast<I2^>(i1);   // OK, I1 and I2 have common type: X
   // I2^ i3 = static_cast<I2^>(i1);   C2440 use safe_cast instead
   try {
      I3^ i4 = safe_cast<I3^>(i1);   // Fails because i1 is not derived from I3.
   } 
   catch(InvalidCastException^ ic) {
     wprintf(L"Caught expected exception: %s\n", ic->Message);
   }
}

Saída

  

Common Language Runtime

safe_cast permite que você altere o tipo de uma expressão e gere código MSIL verificável.

23b7yy6w.collapse_all(pt-br,VS.110).gifSintaxe

[cli]::safe_cast<type-id>(expression)

23b7yy6w.collapse_all(pt-br,VS.110).gifParâmetros

  • identificação do tipo
    Um manipulador para um tipo de referência ou de valor, ou uma referência de controle para um tipo de referência ou de valor.

  • expressão
    Uma expressão avaliada para um manipulador para um tipo de referência ou de valor, ou uma referência de controle para um tipo de referência ou de valor.

23b7yy6w.collapse_all(pt-br,VS.110).gifComentários

A expressão safe_cast<identificação de tipo>(expressão) converte a expressão de operando em um objeto do tipo identificação de tipo.

O compilador aceitará um static_cast na maioria dos locais que aceitem um safe_cast.No entanto, é garantido que safe_cast produza um MSIL verificável, onde como um static_cast poderia produzir MSIL não verificável.Consulte Código puro e verificável (C + + / CLI) e Peverify (ferramenta PEVerify) para obter mais informações sobre código verificável.

Como static_cast, safe_cast chama conversões definidas pelo usuário.

Para obter mais informações sobre conversões, consulte Operadores de conversão.

safe_cast não aplica um const_cast (const rejeitado).

safe_cast está no namespace cli.Consulte Namespaces Plataforma, padrão e cli (Extensões de Componentes C++) para maiores informações.

Para obter informações sobre safe_cast, consulte:

23b7yy6w.collapse_all(pt-br,VS.110).gifRequisitos

Opção do compilador: /clr

23b7yy6w.collapse_all(pt-br,VS.110).gifExemplos

Exemplo

Um exemplo de onde o compilador não aceitará static_cast mas aceitará safe_cast é para conversões entre tipos de interface não relacionados.Com o safe_cast, o compilador não emitirá um erro de conversão e executará uma verificação em tempo de execução para ver se a conversão é possível

// safe_cast.cpp
// compile with: /clr
using namespace System;

interface class I1 {};
interface class I2 {};
interface class I3 {};

ref class X : public I1, public I2 {};

int main() {
   I1^ i1 = gcnew X;
   I2^ i2 = safe_cast<I2^>(i1);   // OK, I1 and I2 have common type: X
   // I2^ i3 = static_cast<I2^>(i1);   C2440 use safe_cast instead
   try {
      I3^ i4 = safe_cast<I3^>(i1);   // fail at runtime, no common type
   } 
   catch(InvalidCastException^) {
      Console::WriteLine("Caught expected exception");
   }
}

Saída

  

Consulte também

Conceitos

Extensões de componente para plataformas de tempo de execução