2009-04-11 5 views
1

J'ai juste une enquête .NET générale:Combien coûte l'ajout d'un élément à ItemControl?

Supposons que j'ai une grande (taille de la mémoire) Classe

public class BigClass 
{ 
... 
} 

Si j'ajouter un élément à un ItemControl tel qu'un ListBox ou DataGrid comme celui-ci

BigClass b = new BigClass(); 
ListBox1.Items.Add(b); 

Comment l'utilisation des ressources est-elle en train de faire quelque chose comme ça? L'élément ajouté est-il référencé ou est-il une copie de l'instance (causant beaucoup d'utilisation de la mémoire)?

Merci.

Répondre

3

Il sera ajouté à titre de référence. Il n'y a pas de sémantique de copie implicite pour les objets .NET.

+0

Vous avez raison, mais cela ne veut pas dire qu'il n'y a pas Clone dans la méthode « ajouter » des ListBox.Items – user88637

0

Juste pour être sûr, je viens de faire un test rapide et sale, ListBox1.Items ne fait pas de copie mais garde plutôt une référence.

Voici le code complet:

public class A 
{ 

    int a; 

    public int A1 
    { 
     get { return a; } 
     set { a = value; } 
    } 

} 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     A a = new A(); 
     a.A1 = 4; 

     A b = new A(); 
     b.A1 = 4; 

     listBox1.Items.Add(a); 
     listBox1.Items.Add(b); 

     A c = listBox1.Items[0] as A; 
     A d = listBox1.Items[1] as A; 

     if(a.Equals(c)) 
     { 
      int k = 8; //program enter here so a is instance of c 
     } 

     if (a.Equals(d)) 
     { 
      int k = 8; //program doesn't enter here meaning a is not instance of d 
     } 


    } 
} 
+0

Merci, c'est très utile d'être sûr. – Adam

Questions connexes