IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

valeur du return dans une "fonction"


Sujet :

Windows Forms

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 478
    Points : 3 104
    Points
    3 104
    Par défaut valeur du return dans une "fonction"
    Bonjour

    Dans le langage que j'utilisais avant (Delphi), une fonction renvoyait son résultat dans une variable result. Ainsi, on pouvait travailler sur cette "variable" dans le corps de la fonction.

    En C#, on fait juste un return de la valeur désirée.

    Je me demandais si c'est le seul moyen de procéder ou si la valeur de la fonction est accessible de la même manière que dans mon vieux Delphi, dans le coprs de la fonction.

    Possible ou pas ?

    J-L

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Non, ce n'est pas prévu, et pas très utile à vrai dire - de ce point de vue Delphi ne faisait que reproduire un vieux concept du Pascal, qui consiste à utiliser la fonction comme une variable implicite.

    Ca marche en VB, aussi, pour des raisons historiques similaires : quand les "Basic" ont commencé à évoluer au début des années 80, cela s'est fait en s'appropriant une partie des syntaxes et des structures de contrôle du Pascal - le langage structuré par excellence des 80' - si on oublie Ada; or, la syntaxe VB est à la base, bien évidemment, une syntaxe de Basic. (comme son nom l'indique )

    Pour C#, le nom de la fonction "tout seul" est plus proche du concept C dont il est, de manière lointaine, issu : en C, le nom de la fonction "tout seul" est le pointeur de cette fonction.(bien entendu, le concept de pointeur de fonction n'existe pas en C# - son "équivalent objet" étant le concept de delegate).

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 478
    Points : 3 104
    Points
    3 104
    Par défaut
    Ok ... mais du coup, il y a un concept de portée que le débutant que je suis s'explique mal.

    Dans l'exemple suivant, ma classe implémente une fonction qui renvoie un DataTable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public DataTable Clients()
    {
          SqlDataAdapter dta = new SqlDataAdapter("SELECT ID_Client, Nom + ', ' + Prenom as Nom FROM Clients", connexion);
          DataTable tbl = new DataTable();
          dta.Fill(tbl);
          return tbl;
    }
    Dans ma classe appelante, j'ai une variable du même type à laquelle j'assigne le résultat de cette fonction.

    Dans le code de la fonction, dta est une variable de portée locale.
    Ne serait-il pas normal qu'au sortir de la fonction, cette variable ne pointe plus sur "rien" ?

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Là, j'avoue que j'ai un peu de mal à te suivre. Cette variable étant de portée locale, elle n'existe plus quand tu quitte ta fonction (on parle plutôt de méthode que de fonction, mais c'est pas grave); donc où est le problème ? l'instance qu'elle référençait n'ayant plus de référence active, le GC va lui régler son compte tôt ou tard.

  5. #5
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Ok ... mais du coup, il y a un concept de portée que le débutant que je suis s'explique mal.

    Dans l'exemple suivant, ma classe implémente une fonction qui renvoie un DataTable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public DataTable Clients()
    {
          SqlDataAdapter dta = new SqlDataAdapter("SELECT ID_Client, Nom + ', ' + Prenom as Nom FROM Clients", connexion);
          DataTable tbl = new DataTable();
          dta.Fill(tbl);
          return tbl;
    }
    Dans ma classe appelante, j'ai une variable du même type à laquelle j'assigne le résultat de cette fonction.

    Dans le code de la fonction, dta est une variable de portée locale.
    Ne serait-il pas normal qu'au sortir de la fonction, cette variable ne pointe plus sur "rien" ?
    tbl est de porté local, elle pointe(référence) une table en mémoire.
    Quand tu fais maVariable = Clients()

    la référence(vers laquel tbl pointe) est maintenant référencer aussi par maVariable. Donc quand tu quit ta methode clients() la variable tbl est détruire mais pas la table en mémoire car il y a encore une référence dessus (maVariable). Tant que maVariable va etre en "vie" la table ne sera pas disposé (Par la garbage collector)

  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 478
    Points : 3 104
    Points
    3 104
    Par défaut
    ok, pigé ... pour le SqlDataAdapter, vu qu'il n'est plus "utilisé" après ce code, il est détruit par le GC. Je pensais que cet élément était nécessaire à la "survie" du DataTable renvoyé par la méthode mais en fait, il ne fait que remplir ce DataTable et rien d'autre.

    Et pour le DataTable renvoyé par la mathode, vu que je l'assigne à une autre variable dans le code appelant, il reste "vivant" tant que la-dite variable est utilisée.

    Compris !

    Merci à tous les deux !

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Oui, c'est le coté "magique" des langages managés.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. plusieurs return dans une seule fonction?
    Par grodashe dans le forum Débuter
    Réponses: 4
    Dernier message: 01/01/2010, 17h09
  2. Probleme valeur de parametre dans une fonction
    Par TitouLolo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/05/2005, 13h56
  3. Réponses: 5
    Dernier message: 15/04/2005, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo