__try_cast
Remarque Cette rubrique s'applique uniquement à la version 1 des extensions managées pour C++. Cette syntaxe doit être utilisée uniquement pour conserver le code de la version 1. Consultez safe_cast pour plus d'informations sur l'utilisation de la fonctionnalité équivalente dans la nouvelle syntaxe.
Exécute le cast spécifié ou lève une exception si le cast échoue.
__try_cast < type-id > ( expression )
Notes
Le mot clé __try_cast (dont le comportement est semblable à celui de dynamic_cast) permet de lever automatiquement une exception (de type System::InvalidCastException) dès lors que l'opération de cast spécifiée échoue.
Le mot clé __try_cast peut être utilisé pendant la phase de test de votre application pour vous alerter automatiquement en cas de risque d'échec de cast.
Lors du portage des Extensions managées pour C++, remplacez les appels __try_cast par safe_cast.
__try_cast ne fonctionne pas sur les casts du type pointeur à valeur (__value), car il n'est pas possible de vérifier les types au moment de l'exécution.
Exemple
Dans l'exemple suivant, une tentative de cast d'un pointeur (de type Derived) en un autre pointeur (de type MoreDerived ) est effectuée. Si le cast échoue, il est intercepté et signalé par le bloc 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*");
}
}
Sortie
Could not cast 'bp' to MoreDerived*