装箱和拆箱
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了装箱和拆箱,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1458字,纯文字阅读大概需要3分钟。
内容图文
1. 装箱是将值类型转换为 object 类型或由此值类型实现的任何接口类型的过程。装箱是隐式的。
当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。
装箱和取消装箱的概念是类型系统 C# 统一视图的基础,其中任一类型的值都被视为一个对象。
2. 拆箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。
拆箱操作包括以下两步:
检查对象实例,以确保它是给定值类型的装箱值。
将该值从实例复制到值类型变量中。
相对于简单的赋值而言,装箱和拆箱过程需要进行大量的计算。
对值类型进行装箱时,必须分配并构造一个新对象。
拆箱所需的强制转换也需要进行大量的计算,只是程度较轻。
3. 下面的语句演示装箱和拆箱两种操作:
int i = 123; // a value type
object obj = i; // boxing
int j =
(int)obj; // unboxing
要在运行时成功拆箱值类型,被拆箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。 <SPAN id="mt40" class="sentence" data-source=‘Attempting to unbox null causes a NullReferenceException.‘ data-guid="28743a40d8c06798f09381ab303bc59a">尝试拆箱 null 会导致 NullReferenceException。
InvalidCastException .‘ data-gu>尝试拆箱对不兼容值类型的引用会导致 InvalidCastException。<SPAN class="sentence" data-source=‘Attempting to unbox a reference to an incompatible value type causes an InvalidCastException.‘ data-guid="d5eae09cead581eb6371f4223ed02145">例如:
class TestUnboxing { staticvoid Main() { int i = 123; object o = i; // implicit boxing 隐式装箱try { int j = (short)o; // attempt to unbox 尝试拆箱 System.Console.WriteLine("Unboxing OK."); } catch (System.InvalidCastException e) { System.Console.WriteLine("{0} Error: Incorrect unboxing.", e.Message); } } }
此程序输出:
Specified cast is not valid. Error: Incorrect
unboxing. 因为o不是short型的装箱值
如果将下列语句:
int j = (short) o;
更改为:
int
j = (int) o;
将执行转换,并将得到以下输出:
Unboxing OK.
原文:http://www.cnblogs.com/mingshu/p/3729536.html
内容总结
以上是互联网集市为您收集整理的装箱和拆箱全部内容,希望文章能够帮你解决装箱和拆箱所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。