Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Affectation par adresse

6 réponses
Avatar
Sylfelin
Bonjour,

Soit la déclaration

List<MaStructure> maList = new List<MaStructure>();

Dans l'égalité ci-dessous je voudrais affacter par référence et non pas
faire une recopie.

MaStructure test;
maList[1].Valeur=5;
test = maList[1];
test.Valeur=15;

J'aurais voulu que maList[1].Valeur contienne 15 et non 5.

Comment faire pour que le égale ne soit pas une recopie mais une
affectation de référence ?


Merci

--

--------------------------
Merci
Sylfelin

6 réponses

Avatar
David Sebban [MSFT]
en utilisant un pointeur peut etre ?

&test = &(maList[1])

(juste une idée comme ca, je suis loin d'etre un expert c#)

--
David Sebban [MSFT] | http://blogs.msdn.com/dsebban
MCTS Vista & BDD | MCITP Enterprise & Consumer support
This Posting is AS IS with NO WARRANTIES and confers NO RIGHTS

"Sylfelin" a écrit dans le message de groupe
de discussion :
Bonjour,

Soit la déclaration

List<MaStructure> maList = new List<MaStructure>();

Dans l'égalité ci-dessous je voudrais affacter par référence et non pas
faire une recopie.

MaStructure test;
maList[1].Valeur=5;
test = maList[1];
test.Valeur;

J'aurais voulu que maList[1].Valeur contienne 15 et non 5.

Comment faire pour que le égale ne soit pas une recopie mais une
affectation de référence ?


Merci

--

--------------------------
Merci
Sylfelin




Avatar
Sylfelin
> Soit la déclaration

List<MaStructure> maList = new List<MaStructure>();

Dans l'égalité ci-dessous je voudrais affacter par référence et non pas faire
une recopie.

MaStructure test;
maList[1].Valeur=5;
test = maList[1];
test.Valeur;

J'aurais voulu que maList[1].Valeur contienne 15 et non 5.

Comment faire pour que le égale ne soit pas une recopie mais une affectation
de référence ?



Je me réponds:

La différence (ente autre) entre la structure et la class c'est que la
structure est passé par valeur. Donc j'utilise une class.

--

--------------------------
Merci
Sylfelin
Avatar
Arnaud Lhopiteau
Bonjour,
dans ce cas il ne faut pas utiliser de structure.

Il te faut utiliser un type défini par le mot-clé class.

Pourquoi? Les variables d'un type issu de "struct" sont
"physiquement" des objets. Celles issu d'un type issu de "class" sont
des références.

Ainsi lorsque tu affectes la valeur d'un référence à une autre tu
désignes le même objets.
Par contre dans le cas de struct, l'affectation même à une copie
d'objet.


Arnaud Lhopiteau
MCSD/MCTS
Avatar
Delf
Il se trouve que Sylfelin a formulé :

La différence (ente autre) entre la structure et la class c'est que la
structure est passé par valeur. Donc j'utilise une class.



Quels sont les avantages à utiliser une structure et non pas une classe
?

Merci.

--
Delf
Avatar
Christophe Lephay
"Delf" a écrit dans le message de groupe de discussion :
4942a669$0$8269$
Il se trouve que Sylfelin a formulé :

La différence (ente autre) entre la structure et la class c'est que la
structure est passé par valeur. Donc j'utilise une class.



Quels sont les avantages à utiliser une structure et non pas une classe ?



Les struct sont stockées sur la pile. L'avantage est que leur
allocation/désallocation est donc très rapide.

Elles offrent aussi une sémantique de valeur plutôt que la sémantique de
référence qu'on trouve avec les classes, ce qui veut dire que les objets
sont copiés lors d'une affectation, qu'ils ne sont caractérisés par aucune
identité propre mais simplement par la valeur de leurs membres.
Avatar
Christophe Lephay
"Christophe Lephay" a écrit dans le message
de groupe de discussion :

Les struct sont stockées sur la pile. L'avantage est que leur
allocation/désallocation est donc très rapide.



Egalement, du fait de leur localisation, il y a de grandes chances que les
accès aux données sur la pile soient plus rapides (plus de chances de se
trouver dans le cache).