购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3-9 object数据类型

3-9-1 object数据类型

object数据类型是System.Object在.NET中的别名,即引用数据类型(Reference Type),栈空间(Stack)存储的是32位对象的地址,此地址指向的空间所存储的数据内容可以是整数、浮点数、字符串等,甚至可以是后文会介绍的数组、类等。以下是一个object x存储100的内存图形。

这一章我们介绍了C#所提供的数据类型,除了字符串和object外,都是值数据类型,所谓的值数据类型是当我们声明值数据类型的变量时,编译程序会配置一个固定的内存空间存储此变量。因为每一个变量皆是独立的,所以变量内容不会互相影响。所谓的引用数据类型,是变量指向一个内存空间,如果设定两个引用型的变量相等,则其实是指这两个引用型变量指向相同的内存地址,未来内存地址内容变更时,这两个变量内容将同步变更,在后文读者学习更多C#知识时,笔者会以实例解说,详情可以参考16-4节。

3-9-2 Value Type数据类型

值数据类型使用栈空间进行存储,如int、double等都属Value Type数据类型。右图是一个int x存储100的内存图形。

3-9-3 装箱

程序设计时可以将任何类型的实值赋值给object数据类型的变量,如果将一个值数据类型转换成object数据类型则称为装箱(Boxing),例如:

     int x = 100;
     object o = x;

这个在C#编译程序中的动作称为装箱(Boxing),其主要原理是一般来说值(Value)的数据是存储在栈空间内的,当将数据转成引用型数据时是将值存储在堆空间(Heap)中,然后栈空间有一个内存存储该值的地址,这就是引用型数据的意义。例如:当将x值100设定给object o时,此100存储在堆内存空间,在栈内存空间有一个o,此o所存储的是堆空间内object 100内容所在地址,可以参考下列说明图。

3-9-4 拆箱

将object数据类型转换成值数据类型,称为拆箱(Unboxing),例如:

这个在C#编译程序中的动作就称为拆箱(Unboxing),其主要原理是将堆空间object 100的内容复制至栈空间y内,y所存的就是100的内容,可以参考下列说明图。

3-9-5 拆箱/装箱与泛型

对于一般读者而言拆箱与装箱很便利,但当读者逐步变身C#高手,需考虑到设计程序的绩效时,如果程序频繁使用拆箱/装箱,读者就会发现程序效能变得比较差,C#提供泛型功能可以比较有效地处理这类的问题,读者可以参考21-1-2节和21-2-1节的实例解说。 klej0OiAlSds0jo4k8v0TUwfVXcOLzbpMkHsA6TkRbJjj9Fq2Lp6R7WHQhLs6H7c

点击中间区域
呼出菜单
上一章
目录
下一章
×