嗯,我已经研究了泛型并有以下问题:
List<someClass> list=new List<someClass>
SomeClass MyInstance=SomeClass();
list.Add(MyInstance);
我不确定将添加到列表中的是引用还是指向MyInstance实际值的引用类型对象。
编辑:或者我将添加一个值(即引用数据类型),该值指向实际对象?
谢谢
当你处理引用类型时,你总是在处理引用,因此一个引用将被添加到列表中(实际上是引用的副本)。你实际上没有选择;这就是语言的工作方式。
由于 someClass
是一个引用类型,所以会将对 MyInstance
的引用复制到列表中。
由于MyInstance
是引用类型,因此将添加一个引用。
MyInstance = null
那么,你无法读取MyInstance对象,
但你仍然可以读取列表中的对象,
因为你有两个引用指向MyInstance,
换句话说,该对象有两个引用,
其中一个是
SomeClass MyInstance=SomeClass();
另一个被存储在列表中,
你只需要处理其中一个,
所以你仍然可以读取list[0]
null
不是“处理”操作。 - Andrew Barber该列表将存储对象的引用而非对象实例。
实际上,List通过使用数组来存储值,数组将引用存储在堆栈上并将对象实例存储在堆上。
List<>
的引用本身可能在栈上,但它所包含的引用不是。 - Andrew Barber
ref
或out
标记,否则它是按值传递的。我会重复一遍:所有参数,除非带有ref
或out
标记,否则都是按值传递的,无论该参数是值类型实例还是引用类型实例。对于引用类型,值就是引用。 - jason