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