C#装箱拆箱
来源:互联网 发布:vscode环境搭建 编辑:程序博客网 时间:2024/05/01 01:19
首先,说一下装箱和拆箱。
在.net中的通用类型系统(Common Type system,CTS)中,所有类型都是对象(object),都派生自System.Object。CTS支持两组类型:值类型和引用类型。如果变量是值类型那么这个变量就包含实际的数据。也就是在内存中确实会分配那么一部分空间给这个变量并存储值,引用类型就类似一个类型安全的指针,本身并没有开辟内存空间去存储东西。这玩意是基础,罗嗦的重复一下。
而装箱(box)就是将值类型转换为引用类型的过程。相反的过程就叫拆箱(unbox)。
a、装箱
一个很简单的例子。新建一个控制台程序,在Main()里面就写两句话。
b、拆箱
在刚才程序的基础上,再加一句话变成,编译:
int i = 13;
object ob = i;
int j = (int)ob;
object ob = i;
int j = (int)ob;
在装箱的时候,并不需要显示类型转换。但在拆箱时需要类型转换。这是因为在拆箱时对象可以被转换为任何类型。
说说拆箱unbox的内部过程:
(1)因为一个对象将被转换,所以编译器必须先判断堆栈上指向合法对象的地址,以及这个对象类型是否可以转换为MSL unbox指令调用中指定的值类型。如果检查失败就抛出InvalidCastException异常。
(2)校验通过后,就返回指向对象内的值的指针。可以看出,装箱操作会创建转换类型的副本,而拆箱就不会。不过注意一下,在我们装箱的时候是先把变量i的值复制了一份赋给ob的,所变量j拿到的是ob这个变量的引用。也就是后面再改变i的值并不会影响j的值,但是改变ob的值就会。
int i = 13;
object ob = i;
object ob = i;
- C#装箱拆箱
- 【C#】装箱和拆箱
- uni1->C#->装箱拆箱
- 【C#】装箱与拆箱
- 【C#】装箱与拆箱
- objective-c 装箱和拆箱
- 装箱与拆箱C#(一)
- 装箱和拆箱(C#)
- 《Effective C#》之减少装箱和拆箱
- 《Effective C#》之减少装箱和拆箱(图)
- C#==>类型转换 与 装箱拆箱
- C#—装箱(boxing)与拆箱(unboxing)
- C#——装箱(boxing)和拆箱(unboxing)
- C# 指南之装箱与拆箱
- [C#] 值类型的装箱和拆箱
- ios学习路线—Objective-C(装箱和拆箱)
- 装箱和拆箱
- 装箱和拆箱
- windows 查看端口使用情况
- C语言的void和void *(48)
- 菲斯克 Latigo CS
- C/C++语言void及void指针深层探索
- 2007 google 笔试题
- C#装箱拆箱
- 为他人高兴,或为自己悲伤,依或是高兴且悲伤
- vocabulary: unclassified cipher lobby ...
- C语言的宏定义(49)
- C语言的宏用法及include(50)
- 数据库的存储过程
- 晚上要理理发,换个样子
- C#中的DataGridView控件(WIN FORM)
- 诺顿无法启动扫描,扫描引擎返回错误0x20000058错误