1. 内存中的位置
1.1. 值类型的数据存储在栈中
1.2. 引用类型的数据存储在堆中
1.3. eg
1.3.1. int numb=10, 代码中的10是值类型的数据,numb只是一个指向10的变量而已。其中10存储在栈中,变量numb也存储在栈中。
1.3.2. Person p=new Person(),代码中 new Person()所创建的对象存储在堆中,变量p存储在栈中。
1.4. 总结
1.4.1. 所有变量都存储在栈中,无论此变量存储的值是值类型和引用类型。
2. 基类
2.1. 引用类型和值类型都继承自System.Object类
2.2. 几乎所有的引用类型都直接从System.Object继承
2.3. 值类型则继承其子类,即直接继承System.ValueType
3. 种类
3.1. 值类型
3.1.1. 结构体
3.1.1.1. struct(直接派生于System.ValueType)
3.1.1.1.1. 数据量小勇struct,数据量大用class
3.1.2. 数值类型
3.1.2.1. 整型
3.1.2.1.1. short(System.Int16),ushort(System.UInt16),int(System.Int32),uint(System.UInt32), long(System.Int64),ulong(System.UInt64), sbyte(System.SByte的别名),byte(System.Byte),
3.1.2.2. 字符型
3.1.2.2.1. char(System.Char)
3.1.2.3. 浮点型
3.1.2.3.1. float(System.Single),double(System.Double)
3.1.3. decimal型
3.1.3.1. decimal(System.Decimal)
3.1.4. bool型
3.1.5. 枚举
3.1.5.1. enum(派生于System.Enum)
3.1.6. 可空类型
3.1.6.1. 派生于System.Nullable泛型结构体,语法 T? 是 System.Nullable<T> 的简写,此处的 T 为值类型
3.2. 引用类型
3.2.1. 数组:(派生于System.Array)数组的元素,不管是引用类型还是值类型,都存储在托管堆上;
3.2.2. 类:class(派生于System.Object);
3.2.3. 接口:interface(接口不是一个“东西”,所以不存在派生于何处的问题。);
3.2.4. 委托:delegate(派生于System.Delegate);
3.2.5. object:(System.Object的别名);
3.2.6. 字符串:string(System.String的别名)。
3.2.6.1. 不可变引用类型