Affectation par adresse

Le
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;

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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
David Sebban [MSFT]
Le #18121981
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" 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




Sylfelin
Le #18121711
> 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
Arnaud Lhopiteau
Le #18121701
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
Delf
Le #18123171
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
Christophe Lephay
Le #18125251
"Delf" 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.
Christophe Lephay
Le #18127661
"Christophe Lephay" 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).
Publicité
Poster une réponse
Anonyme