在C#中,以下“容器”为引用类型保留引用或对象本身?
Queue
Stack
Array
List
Vector
例如,如果我执行以下操作:
Queue<MyItem> item = new Queue<MyItem>(100);
MyItem mit = new MyItem();
item.Enqueue(mit);
mit
的引用是否已复制到item
或mit
对象本身已移至item
内存位置?
如果我说
item = null;
它不会将item
内的所有对象都设置为null。我是对的吗?
答案 0 :(得分:6)
Queue包含对contains中项目的引用。将队列设置为null不会影响项目本身。
答案 1 :(得分:2)
这取决于MyItem是值类型(有时在关键字后面称为struct)还是引用类型(类)。值类型赋值复制值(即整个对象),而引用类型复制引用。
答案 2 :(得分:0)
将mit的引用复制到item或mit对象本身是否已移动到项目内存位置?
首先,我认为你对实施细节的关注太多了。
“mit的参考”有点无意义。 “mit”是一个参考。如果我添加mit2 = mit;
,那么mit&amp; mit2引用相同的对象。
同样,将“mit对象本身...移动到项目内存位置”在托管代码中并没有真正意义。如果我添加item.Enqueue(mit2);
,则item现在有两个指向同一对象的条目。
答案 3 :(得分:0)
将mit的引用复制到 item或mit对象本身已经存在 移到项目记忆位置?
不是真的。如果有问题的对象是引用类型,则既不移动也不复制。更准确地说,对集合添加了对同一对象的新引用。如果对象是值类型,那么它确实被复制。
如果我说
item = null;
它不会 将item中的所有对象设置为null。 我是对的吗?
你是对的。无论它们是引用还是值类型,它都不会对集合中包含的项执行任何操作。