我这两天也在学这个知识点,搜啊搜,又翻书以及在电子书里搜索。
【杨中科老师的视频里】写:int、char、bool、datetime等类型都属于值类型,赋值时是值传递,传递一份拷贝到新开辟的内存空间里。 类的实例化对象则是引用类型,赋值的时候是引用传递。
【c#高级编程第七版里】里写:在C#中,引用类型用类定义,值类型用结构定义。要声明引用类型,C#和Visual Basic 使用class 关键字。在使用引用类型时,需要声明一个变量,必须在托管堆上给该对象分配内存。
【网上搜来的】:C#中,任何引用类型的变量,都是在堆上分配的。(强制声明stackalloc等特殊情况除外)。关键字new就是用于开辟一块新的空间。
函数内部直接定义的值类型,比如你在函数内部定义了一个int a,是在栈上面分配内存。而对象内部的成员变量(除非静态),不管是值类型还是引用类型,它都只是整个对象的一部分,而对象是类的实例,因此对象是在堆上分配内存的。
简单的这么去理解,基本的数据类型如int,long等分配在栈上,引用数据类型分配在堆上
答案自己去对应吧
1、堆
2、堆
3、堆
4、堆
5、堆
class类型的对象只能创建在托管堆上。