__try_cast
Publicada: abril de 2016
Nota Este tema solo es aplicable a la versión 1 de Extensiones administradas para C++. Esta sintaxis solo se debe utilizar para mantener el código de la versión 1. Consulte safe_cast (Extensiones de componentes de C++) para obtener información sobre el uso de la funcionalidad equivalente en la nueva sintaxis.
Realiza la conversión especificada o inicia una excepción si la conversión produce un error.
Sintaxis
__try_cast <
type-id
>
(
expression
)
Comentarios
La palabra clave de __try_cast (similar en comportamiento a dynamic_cast) proporciona compatibilidad para iniciar automáticamente una excepción (de tipo System::InvalidCastException) siempre que se produzca un error en la operación de conversión especificada.
La palabra clave __try_cast se puede usar durante la fase de pruebas de la aplicación y alerta automáticamente de posibles errores de conversión.
Al trasladar extensiones administradas para C++, reemplace __try_cast llama a safe_cast (Extensiones de componentes de C++).
__try_cast no funciona en conversiones de puntero a tipos de valor (__value), ya que no es posible comprobar los tipos en tiempo de ejecución.
Ejemplo
En el ejemplo siguiente, se realiza un intento de convertir un puntero (de tipo Derived) a otro puntero (de tipo MoreDerived). Si la conversión produce un error, el bloque catch lo detecta e informa de ello:
// 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*");
}
}
Salida
Could not cast 'bp' to MoreDerived*