队列保持引用或对象值?

时间:2010-07-19 17:43:06

标签: c# .net

在C#中,以下“容器”为引用类型保留引用或对象本身?

Queue
Stack
Array
List
Vector

例如,如果我执行以下操作:

Queue<MyItem> item = new Queue<MyItem>(100);
MyItem mit = new MyItem();
item.Enqueue(mit);

mit的引用是否已复制到itemmit对象本身已移至item内存位置?

如果我说

item = null;

它不会将item内的所有对象都设置为null。我是对的吗?

4 个答案:

答案 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。   我是对的吗?

你是对的。无论它们是引用还是值类型,它都不会对集合中包含的项执行任何操作。