我已经研究过泛型并且有以下问题:
List<someClass> list=new List<someClass>
SomeClass MyInstance=SomeClass();
list.Add(MyInstance);
我不确定将添加到列表中的内容 - 引用类型的引用或对象(指向MyInstance的实际值)。
编辑:或者我会添加指向实际对象的值(即参考数据类型)?
由于
答案 0 :(得分:20)
当您处理引用类型时,您始终处理引用,因此引用将添加到列表中(实际引用的副本)。你实际上没有选择;这就是语言的运作方式。
答案 1 :(得分:6)
假设someClass是引用类型(例如类)而不是值类型(例如struct),那么它是引用。
我也承认定义一个名为someClass
的结构会非常恶魔 struct someClass
这是关于参数传递的Jon Skeet文章的obligatory link。
答案 2 :(得分:4)
由于someClass
是引用类型,因此对MyInstance
的引用将被复制到列表中。
答案 3 :(得分:1)
将添加引用,因为MyInstance
是引用类型
答案 4 :(得分:-1)
列表将存储对象的引用而不是对象实例。
实际上,List存储值由use数组和数组存储在堆栈上的引用并将对象实例存储在堆上。
答案 5 :(得分:-1)
如果您将对象丢弃,请执行以下操作
MyInstance = null
然后,你无法读取MyInstance对象,
但你仍然可以阅读列表中的对象,
因为你有两个引用指向MyInstance,
换句话说,该对象有两个引用,
一个是
SomeClass MyInstance=SomeClass();
另一个存储在列表中,
你只需处置其中一个,
所以你仍然可以阅读列表[0]