结构体:两个变量指向同一个值的情况是存在的,因此对这两个变量的任意一个进行操作,其结果必然会影响另一个
对于结构体而言,直接包含他的数值,每个结构体都保存一份自己的数据,修改每一个结构的数据都不会对其他结构的数据造成影响
值类型:直接将内存存储在栈内,由系统自动释放资源的数据类型.
整型:Int; 长整型: long; 浮点型: float; 字符型: char; 布尔型: bool; 枚举:enum; 结构:struct;
在C#中所有的值类型都继承自:System.ValueType
基于值类型的变量直接包含值。 将一个值类型变量赋给另一个值类型变量时,将复制包含的值。
引用类型:由类型的实际值引用(类似于指针)表示的数据类型
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
以下示例程序中,k被初始化为i的引用。
语句k = j并不能将k修改成为j的引用,只是把k的值改变成为6。
由于k是i的引用,所以i的值也变成了6。
int i = 5;
int j = 6;
int &k = i;
k = j; // k和i的值都变成了6;
值类型与引用类型的区别:
1、与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
2、所有的值类型均隐式派生自SystemValueType。
3、与引用类型不同,不能从值类型派生出新的类型。但与引用类型相同的是,结构也可以实现接口。
4、与引用类型不同,值类型无法包含null值。但是,可以为 null 的类型功能允许值类型分配给null。
5、每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
结构体和类的区别:
1、结构体关键字是struct 类的关键字是class
2、结构体不可以在声明时直接对字段初始化而类可以
3、结构体无论有没有声明构造函数,默认构造函数一直存在,而类中一旦声明构造函数,编译器都不在提供默认构造函数
4、结构体不能显示的声明无参的默认构造函数
5、结构体中的构造函数必须为所有的字段初始化
6、结构体不能被继承,也不能使用关键字abstract或sealed关键字
7、结构体是值类型,类是引用类型
8、结构体不能定义析构函数