Auteur de questions
Gestion de la mémoire pour les List et Array

Discussion générale
-
Bonjour,
Je me suis rendu compte après quelques tests que la gestion des objets "standard" et la gestion des objets List était différente. Je ne comprends pas quelle en est la raison au niveau de la gestion des objets en mémoire. Pourquoi list2 = list1 n'est pas une copie par référence? Et donc pourquoi ne doit-on pas utiliser un constructeur par (re)copie pour les listes contrairement aux objets "standard"?
Exemple Objet "standard" :
public class Stylo { public string Couleur = string .Empty; public Stylo() { } public Stylo(string couleur) { Couleur = couleur; } public Stylo(ref Stylo obj) { this .Couleur = obj.Couleur; } } Stylo A = new Stylo("rouge" ); Stylo B = A; //A et B ont comme couleur rouge A.Couleur = "vert" ; //A et B ont comme couleur vert B = new Stylo(ref A); A.Couleur = "orange" ; //A a comme couleur orange et B a comme couleur vert
Exemple Objet liste :
List<Stylo> lst1 = new List<Stylo>(); List<Stylo> lst2 ; lst1.Add(new Stylo("bleu")); lst2 = lst1; //lst1 et lst2 sont identique et contiennent un Stylo bleu lst1.Add(new Stylo("noir")); //lst1 contient un Stylo bleu et un noir //lst2 contient un Stylo bleu uniquement !?!
Merci d'avance.- Type modifié Alex Petrescu vendredi 19 novembre 2010 10:38
Toutes les réponses
-
Bonjour,
Il doit y avoir un problème dans la façon dont est examiné le contenu de lst2.
Comme dans le cas précédent lst1 et lst2 référencent le même objet (après essai j'ai bien ici le résultat attendu donc lst1 et lst2 qui ont un seul et même contenu qui est donc "bleu" et "noir").
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered". -
Bonjour,
Pouvez utiliser le code suivant et nous dire le résultat affiché ?
Console.WriteLine(lst1[0].Couleur); Console.WriteLine(lst1[1].Couleur); Console.WriteLine(lst2[0].Couleur); Console.WriteLine(lst2[1].Couleur);
Cordialement
Gilles TOURREAU - MVP C# - MCPD Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5 - MCTS ADO .NET 3.5 / SQL Server 2008 Developper - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr -
Bonjour,
Dogged64, est-ce que vous pouvez nous communiquer le résultat de l’exécution du code de M. Tourreau ?
Cordialement,
Alex
________________
Astuces pour Visual Studio 2010
XNA – Développement jeux vidéo
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.