我只有一般的.NET查询:
假设我有一个大的(内存大小)类
public class BigClass
{
...
}
如果我将项目添加到ItemControl,例如ListBox或Datagrid,就像这样
BigClass b = new BigClass();
ListBox1.Items.Add(b);
在执行此类操作时如何使用资源?添加的项是引用的还是由实例组成的副本(导致大量内存使用)?
感谢。
答案 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
}
}
}