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