C#规范解读之8.2.4 类型系统的统一性

本文探讨了C#中的统一类型系统,解释了如何通过装箱和拆箱机制实现值类型与引用类型间的转换,以及这种特性如何消除了两者之间的界限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。




转载于:https://www.cnblogs.com/fj123/archive/2009/03/19/1417107.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值