向ItemsControl添加元素的代价是多少?

时间:2009-04-11 22:34:34

标签: .net .net-3.5

我只有一般的.NET查询:

假设我有一个大的(内存大小)类

public class BigClass
{
...
}

如果我将项目添加到ItemControl,例如ListBox或Datagrid,就像这样

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

在执行此类操作时如何使用资源?添加的项是引用的还是由实例组成的副本(导致大量内存使用)?

感谢。

2 个答案:

答案 0 :(得分:3)

它将作为参考添加。 .NET对象没有隐式复制语义。

答案 1 :(得分:0)

为了确定,我刚做了一个快速而肮脏的测试,ListBox1.Items不会复制,而是保留一个参考。

以下是完整的代码:

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
        }


    }
}