C#中的类型按照在内存中的分布情况来分类,可以分为以下两种:
值类型(分布于内存中的“堆栈”中)
关于值类型的总结:
1、值类型包含了 “结构体(struct),枚举(Enum),以及那些所谓的简体类型(int,bool,char...)”;
2、所有的值类型都隐式的继承自System.ValueType(MSIL代码中可以看出,如下图);
3、值类型中结构体(struct)的重点:
(1)结构体不能显示声明无参构造函数,可声明有参构造函数(但必须在有参构造函数中对全部字段进行初始化);
(2)结构体中的方法在使用前,必须已经全部字段进行初始化;
(3)结构体的构造函数的作用就是初始化全部字段;
引用类型(分布于内存中的“堆”中)
关于引用类型的总结:
1、引用类型包含了 object、接口、数组、委托、类、自定义类、string;
2、引用类型在New一个”对象“的”实例“时,发生了以下几个步骤:
(1)在应用程序的堆(heap)中创建一个引用类型对象的实例,并为其分配一个内存地址;
(2)自动传递该实例的引用(内存地址)给构造函数;
(3)调用构造函数;
(4)返回该实例的引用,赋值给New ”=“ 左边的变量(变量实际只是保存了一个内存地址,真正的数据在“堆”中);
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PS:以上总结来源于《.Net之美》中所读。