none
Rejeter, relancer une exception... RRS feed

  • Question

  • Bonjour tout le monde,

    j'ai une question sur la gestion des exceptions en VB.Net. Alors voilà, je viens du monde Java et là on a deux mots clef superbes : throw et throws et c'est justement ce dernier que j'essaye de retrouver en VB.Net...

    Bon, je vous explique ma situation. J'ai créé une belle exception se nommant AuthentificationException qui hérite, bien sûr, de ApplicationException.

    Voilà maintenant ce que j'aimerais faire...

    MonConstructeur(identifiant : chaîne de caractères)

    // Appel à la méthode privée gérant l'authentification
    monAuthentification(identifiant)

    FinMonConstructeur

    monAuthentification(identifiant : chaîne de caractères)
    If VérificationBaseDeDonnées_OK Then
    TraitementConstructionObj...
    ...
    ...
    Else
    Throw New AuthentificationException()
    End If
    FinmonAuthentification

    J'aimerais que MonConstructeur puisse lui aussi relancer l'exception donc sa signature serait à la Java like :

    MonConstructeur(identifiant : chaîne de caractères) throws AuthentificationException ainsi ça m'évite de faire un Try / Catch à ce niveau du code. J'aimerais traîter mon exception un niveau supérieur (c'est-à-dire dans la classe qui appelle le constructeur de cet objet).

    J'espère être général et assez clair pour qu'on puisse me répondre.

    BaV et bonne journée,

    Martin
    jeudi 6 mars 2008 10:42

Réponses

  • Normalement, en effectuant un Throw, cela génère une exception, qui est ensuite relayé au code précédent de la pile(Stack), soit dans ton cas le constructeur. Ensuite, puisqu'il n'y a pas de Try..Catch dans ton constructeur il va le renvoyer à la fonction qui a créé cette classe et ainsi de suite jusqu'à ce qu'il trouve un Try..Catch ou qu'il vide la pile, et la il va faire lever une exception non géré.

     

    Donc, si tu mets un try...Catch autour du code au niveau supérieur où il crée cette classe, il va Catcher cette exception et tu n'as qu'à la traiter.

    jeudi 6 mars 2008 12:52
    Modérateur

Toutes les réponses

  • Normalement, en effectuant un Throw, cela génère une exception, qui est ensuite relayé au code précédent de la pile(Stack), soit dans ton cas le constructeur. Ensuite, puisqu'il n'y a pas de Try..Catch dans ton constructeur il va le renvoyer à la fonction qui a créé cette classe et ainsi de suite jusqu'à ce qu'il trouve un Try..Catch ou qu'il vide la pile, et la il va faire lever une exception non géré.

     

    Donc, si tu mets un try...Catch autour du code au niveau supérieur où il crée cette classe, il va Catcher cette exception et tu n'as qu'à la traiter.

    jeudi 6 mars 2008 12:52
    Modérateur
  • Effectivement !


    J'ai, juste après l'ouverture de mon sujet, essayé l'astuce que tu nous a donné. Et ça fonctionne bien...

    En java, on indique à la fin de la signature de la méthode le mot clef throws suivi du nom de l'exception pour rejeter l'exception vers le niveau supérieur.


    J'approuve donc ta réponse, merci !

    @+
    vendredi 7 mars 2008 08:29