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

C# Discussion :

Charger un objet par référence ou par, euh, "transmission"?


Sujet :

C#

  1. #1
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut Charger un objet par référence ou par, euh, "transmission"?
    Salut,

    J'ai une fonction "LoadFromReader" qui comme son nom l'indique charge un objet à partir d'un datareader.
    Vaut-il mieux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    obj = LoadFromReader(dr, obj);
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LoadFromReader(dr, ref obj);
    Merci

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 49
    Points : 55
    Points
    55
    Par défaut
    Je pense qu'il faut mieux utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LoadFromReader(dr, ref obj);
    car bien qu'il n'y ai pas recopie de l'objet dans les 2 cas, avec un passage par reference, tu auras une affectation de moins.
    Je pense que par rapport à un passage par reference d'un type valeur, l'avantage d'utiliser la seconde methode est moins évident.

  3. #3
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    As-tu besoin de passer l'objet en paramètre ? obj = LoadFromReader(dr) ne suffit pas ?

    Mais sinon, je suis d'accord avec Jatukam ; si on veut avec un appel de méthode pouvoir changer la référence de l'objet, l'utilisation de paramètre "ref" me parait toute indiquée.
    ಠ_ಠ

  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Ben en fait, je me suis rendu compte que ref n'est pas nécessaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public MonType Load()
    {
          MonType obj = new MonType();
          // creation du datareader ...
          LoadFromReader(dr, obj);
          return obj;
    }
     
    private void LoadFromReader(IDataReader dr, MonType obj)
    {
          obj.Id = Convert.ToInt32(dr["ID"]);
    }
    suffit.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    oui c'est normal, tu ne fais qu'acceder à un champ, la reference de l'objet obj est toujours la meme. Il aurait fallu faire un ref, si tu avais une methode de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public MonType Load()
    {
          MonType obj = new MonType();
          // creation du datareader ...
          LoadFromReader(dr, obj);
          return obj;
    }
     
    private void LoadFromReader(IDataReader dr, MonType obj)
    {
          obj = new MonType(); // <=
          obj.Id = Convert.ToInt32(dr["ID"]);
    }
    Bon courage.

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

Discussions similaires

  1. Manipuler objet par valeur et par référence
    Par scar63 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 23/04/2012, 00h41
  2. [XL-2010] Objets par référence / création par type
    Par EJO64 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2010, 09h50
  3. Passage par référence versus par pointeur
    Par Seabast888 dans le forum Débuter
    Réponses: 14
    Dernier message: 14/09/2009, 18h17
  4. Par référence ou par valeur ?
    Par Kropernic dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/06/2009, 09h20
  5. par copie ou par référence ?
    Par Rabbit57 dans le forum Général Python
    Réponses: 2
    Dernier message: 25/03/2009, 15h35

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