Salut,
J'ai une fonction "LoadFromReader" qui comme son nom l'indique charge un objet à partir d'un datareader.
Vaut-il mieux faire:
ou bienCode:
1
2 obj = LoadFromReader(dr, obj);
MerciCode:
1
2 LoadFromReader(dr, ref obj);
A+
Version imprimable
Salut,
J'ai une fonction "LoadFromReader" qui comme son nom l'indique charge un objet à partir d'un datareader.
Vaut-il mieux faire:
ou bienCode:
1
2 obj = LoadFromReader(dr, obj);
MerciCode:
1
2 LoadFromReader(dr, ref obj);
A+
Je pense qu'il faut mieux utiliser :
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.Code:
1
2 LoadFromReader(dr, ref obj);
Je pense que par rapport à un passage par reference d'un type valeur, l'avantage d'utiliser la seconde methode est moins évident.
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.
Ben en fait, je me suis rendu compte que ref n'est pas nécessaire:
suffit.Code:
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"]); }
A+
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 :
Bon courage.Code:
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"]); }