关于C#的那些年

C#——类的定义与使用(2)

2020-01-06  本文已影响0人  大鱼鱼

值类型和引用类型

  1. 值类型
    值类型变量直接包含其本身的数据,前面提到的简单类型(int、bool、char、float、double、decimal)、结构类型(struct)、枚举类型(enum)等都是值类型。对于值类型变量,程序在运行时一旦遇到其定义语句(如int x;),系统将直接为该变量分配内存空间,因此之后可以直接赋值和引用。如:“int x;x=100;”
    2.引用类型
    与值类型不同,引用类型本身并不包含数据,只是存储对数据的引用,数据保存在其他位置,数组、字符串、类和接口、委托等属于引用类型。引用型变量在定义时系统并不会为它分配空间,只有当它实例化之后才能获得真正的存储空间。

装箱和拆箱

值类型允许隐式地或显式地转换数据结构。在C#中也允许将任何类型的数据转换为对象,或者将任何类型的对象转换为与之兼容的值类型。
C#把值类型转换为对象的操作称之为装箱,而把对象转换为兼容的值类型的操作称为拆箱。C#的这种装箱和拆箱操作类似于收发邮政包裹,发送包裹之前先装箱打包,收到包裹之后再拆箱解包。
装箱意味着把一个值类型的数据转换为一个对象类型的数据,装箱是隐式的转换过程,由系统自动完成,C#中object类是所有类的最终基类,因此可以将一个值类型变量直接赋值给object对象。
例如:

int i = 100;
object x = i;//表示先创建一个object型的变量x,然后再把值类型变量i赋给它

拆箱意味着把一个对象转换为一个值类型数据,拆箱过程必须是显式转换过程。拆箱时先检查对象所引用的数据的类型,确保拆箱前后的数据类型相同,再复制数据值。
例如:

int i = 100;
object x = i;//装箱正确
int j = x;//拆箱错误,拆箱操作只能显式转换
int k = (int)x;//拆箱正确
long c = (long)x;//拆箱错误,拆箱前后的数据类型应相同
上一篇 下一篇

猜你喜欢

热点阅读