C#object类型的用法(新手必看)
在 C# 中,object 数据类型是 System.Object 在 .NET 中的别名,即引用数据类型(Reference Type),栈空间(Stack)存储的是 32 位对象的地址,此地址指向的空间所存储的数据内容可以是整数、浮点数、字符串、数组、类等。
以下是一个 object x 存储 100 的内存图形。
所谓的引用数据类型,是变量指向一个内存空间,如果设定两个引用型的变量相等,则其实是指这两个引用型变量指向相同的内存地址,未来内存地址内容变更时,这两个变量内容将同步变更。
值数据类型使用栈空间进行存储,如 int、double 等都属 Value Type 数据类型。下图是一个 int x 存储 100 的内存图形。
例如:
例如,当将 x 值 100 设定给 object o 时,此 100 存储在堆内存空间,在栈内存空间有一个 o,此 o 所存储的是堆空间内 object 100 内容所在地址,可以参考下列说明图。
以下是一个 object x 存储 100 的内存图形。

C#值类型和引用类型
C# 提供的所有数据类型,除了字符串和 object 外,都是值数据类型。所谓的值数据类型,是当我们声明值数据类型的变量时,编译程序会配置一个固定的内存空间存储此变量。因为每一个变量皆是独立的,所以变量内容不会互相影响。所谓的引用数据类型,是变量指向一个内存空间,如果设定两个引用型的变量相等,则其实是指这两个引用型变量指向相同的内存地址,未来内存地址内容变更时,这两个变量内容将同步变更。
值数据类型使用栈空间进行存储,如 int、double 等都属 Value Type 数据类型。下图是一个 int x 存储 100 的内存图形。

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

C#拆箱
将 object 数据类型转换成值数据类型,称为拆箱(Unboxing),例如:int x = 100; object o = x; // 将值数据类型转换成 object 类型,称为装箱(Boxing) int y = (int)o; // 将 object 数据类型转成 int 类型,称为拆箱(Unboxing)这个在 C# 编译程序中的动作就称为拆箱(Unboxing),其主要原理是将堆空间 object 100 的内容复制至栈空间 y 内,y 所存的就是 100 的内容,可以参考下列说明图。
