Compartilhar via


__try_cast

 

Publicado: abril de 2016

Observação   neste tópico se aplica somente à versão 1 de Managed Extensions for C++. Esta sintaxe só deve ser usada para manter o código da versão 1. Consulte safe_cast (C++ Component Extensions) para obter informações sobre como usar a funcionalidade equivalente na nova sintaxe.

Executa a conversão especificada ou lança uma exceção se a conversão falhar.

Sintaxe

__try_cast <
 type-id
 >
(
expression 
)

Comentários

O __try_cast palavra-chave (semelhante ao comportamento de dynamic_cast) oferece suporte para gerar automaticamente uma exceção (do tipo System:: InvalidCastException) sempre que a operação de conversão especificada falhar.

O __try_cast palavra-chave pode ser usado durante a fase de teste do seu aplicativo, alertando automaticamente das possíveis falhas de conversão.

Ao migrar extensões gerenciadas para C++, substitua __try_cast chama com safe_cast (C++ Component Extensions).

__try_cast não funciona em conversões de ponteiro para tipos de valor (Value), uma vez que não é possível verificar os tipos em tempo de execução.

Exemplo

No exemplo a seguir, uma tentativa de converter um ponteiro (do Derived tipo) para outro ponteiro (do MoreDerived tipo) é feita. Se a conversão falhar, é capturado e relatado pelo bloco catch:

// keyword__try_cast.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
using namespace System;

__gc struct Base {}; 
__gc struct Derived : Base {};
__gc struct MoreDerived : Derived {};

int main() {
   Base*bp = new Derived;
   try {
       MoreDerived* mdp = __try_cast<MoreDerived*>(bp);
   }
   catch(System::InvalidCastException*) {
       Console::WriteLine("Could not cast 'bp' to MoreDerived*");
   }
}

Saída

Could not cast 'bp' to MoreDerived*