Partilhar via


__try_cast

Observação   Este 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 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.

__try_cast < type-id > ( expression )

Comentários

A palavra-chave __try_cast (semelhante ao comportamento de dynamic_cast) fornece suporte para o lançamento automático de uma exceção (do tipo System::InvalidCastException) sempre que a operação de conversão especificada falhar.

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

Ao migrar extensões gerenciadas para C++, substitua as chamadas __try_cast por Safe_cast.

__try_cast não funciona em conversões de ponteiro para os tipos de valor (__value), pois não é possível verificar os tipos no tempo de execução.

Exemplo

No exemplo a seguir, uma tentativa de conversão de um ponteiro (do tipo Derived ) para outro ponteiro (do tipo MoreDerived ) é feita. Se a conversão falhar, ela será capturada e informada pelo bloco de captura:

// 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*