List – 我是否传递对象或引用?
好吧,我已经研究了generics并有以下问题:
List list=new List SomeClass MyInstance=SomeClass(); list.Add(MyInstance);
我不确定将添加到列表中的内容 – 引用类型的引用或对象(指向MyInstance的实际值)。
编辑:或者我会添加指向实际对象的值(即参考数据类型)?
谢谢
处理引用类型时,您始终处理引用,因此引用将添加到列表中(实际引用的副本)。 你实际上没有选择; 这就是语言的运作方式。
假设someClass是引用类型(例如类)而不是值类型(例如struct),那么它是引用。
我也承认定义一个名为someClass的结构会非常恶魔
struct someClass
这里是关于参数传递的Jon Skeet文章的强制性链接 。
由于someClass
是引用类型,因此对MyInstance
的引用将被复制到列表中。
由于MyInstance
是引用类型,因此将添加引用
该列表将存储对象的引用而不是对象实例。
实际上,List存储值由use数组和数组存储在堆栈上的引用并将对象实例存储在堆上。
如果您按照以下方式处理对象
MyInstance = null
那么,你无法读取MyInstance对象,
但你仍然可以读取列表中的对象,
因为你有两个引用指向MyInstance,
换句话说,该对象有两个参考,
一个是
SomeClass MyInstance=SomeClass();
另一个存储在列表中,
而你只是处置其中一个,
所以你仍然可以阅读清单[0]