一、值类型:
1.概念:
源于System.ValueType,每个值类型的对象都有一个独立的内存区域保存自己的值。
值类型所在的内存区域称为栈(Stack)。分配的空间大小因类型的不同而不同,只要在代码中修改它,就会在内存区域内保存这个值。
赋值操作传递的是变量的值,改变一个变量的值不会影响另一个变量的值。
2.数据类型:
基本数据类型:
整型(int):范围为-2147483648到2147483648
长整型(long):范围为-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
浮点型(float):±1.5e−45 到 ±3.4e38
双精度浮点型(double):±5.0e−324 到 ±1.7e308
字符型(char)
布尔型(bool)
枚举类型(enum):派生于System.Enum
结构类型(struct):直接派生于System.ValueType
二、引用类型:
1.概念:
源于System.Object。
引用类型在栈中分配的空间是相同的,不同的是在堆中分配的空间
对引用类型,赋值是把对象的引用传递给另一个引用。
比如对于数组而言,当一个数组引用赋值给另一个数组引用后,这两个引用指向同一个数组,也就是指向同一块存储空间。
2.数据类型:
类:
基类:System.Object
字符串:string
自定义类:class
接口:interface
数组:派生于System.Array,例如int[]、string[]…
委托:delegate,派生于System.Delegate
三、区别:
1.引用类型与值类型相同的是,结构体也可以实现接口;
2.引用类型可以派生出新的类型,而值类型不能;
3.引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型);
4.引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。