C#提供了一个"统一的类型系统"。所有的类型-包括值类型在内-都是从object类型继承而来。

可以在任何变量上调用object类的方法,甚至包括像int这样的基础类型在内。
例子:

1 using System;
2 class Test
3 {
4 static void Main() {
5 Console.WriteLine(3.ToString());
6 }
7 }

一个整型的常量调用了object类定义的ToString方法,输出是"3"。
例子:
1 class Test
2 {
3 static void Main() {
4 int i = 123;
5 object o = i; // 装箱
6 int j = (int) o; // 拆箱
7 }
8 }

很有意思。
一个int值可以转化成一个object,然后转化回来。
这个例子用到了装箱和拆箱。
当一个值类型的变量转化为引用类型时,一个object箱子将被分配来存放这个值。拆箱是相反的过程。
当一个object箱子转化回它原来的值类型时,那个值将从箱子里复制出来,并传到相应的存储位置。
这种类型的统一性让值类型拥有引用类型的好处,同时去除了不必要的开支。
对于不需要将值类型当作object类型来用的程序,int类型就只是32位的值。
这种能将值类型作为object类型的特性,消除了值类型和引用类型之间的区别,这种区别在大部分其他语言中存在着。
比如说,一个Stack类有Push和Popular方法,它们分别带一个object类型的参数和返回一个object值:

1 public class Stack
2 {
3 public object Pop() {…}
4 public void Push(object o) {…}
5 }

因为C#拥有统一的类型系统,这个Stack类可以用于任何类型,包括值类型如int。




posted on 2009-03-19 21:08  apple123  阅读(413)  评论(0编辑  收藏  举报