C#的拆箱转换

和装箱转换正好相反,拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口的值类型。

拆箱的过程分为两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。

我们举个例子来看看一个对象拆箱的过程。

int i=10;
object obj=i;
int j=(int)obj;

这个过程用图来表示就是:

 

可以看出拆箱过程正好是装箱过程的逆过程。必须注意,装箱转换和拆箱转换必须遵循类型兼容原则。

时间: 2024-09-17 11:38:41

C#的拆箱转换的相关文章

C#中的“装箱”(boxing)与“拆箱”(unboxing)

装箱和拆箱:任何值类型.引用类型可以和object(对象)类型之间进行转换.装箱转换是指将一个值类型隐式或显式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型(interface-type).把一个值类型的值装箱,就是创建一个object实例并将这个值复制给这个object,装箱后的object对象中的数据位于堆中,堆中的地址在栈中.被装箱的类型的值是作为一个拷贝赋给对象的.如:int i = 10;object obj = i; //隐式装箱object obj

C#的装箱和拆箱

到目前为止,我们为大家讲解了有关C#语言中的值类型和引用类型数据. 这一节我们来了解一下C#语言类型系统提出的一个核心概念:装箱(boxing)和拆箱(unboxing).装箱和拆箱机制使得在C#类型系统中,任何值类型.引用类型和object(对象)类型之间进行转换,我们称这种转化为绑定连接. 简单地说,有了装箱和拆箱的概念,对任何类型的值来说最终我们都可以看作是object类型. 4.3.1 装箱转换 4.3.2 拆箱转换

java基础:合法转换与自动装箱、拆箱

问题描述 java基础:合法转换与自动装箱.拆箱 Short y = 100; int z = y; 这两句代码编译正确,但为什么呢?是y先拆箱成short,然后合法转换成int吗? short y1 = 100; Integer z1 = y1; 而这两句代码编译报错,如果按照上面的逻辑,可以y1先合法转换int,然后自动装箱成Integer呀? 解决方案 涉及到隐式转换. 对非引用类型赋值的时候,对基本数据类型会进行自动拆箱,然后可以隐式转换为大类型: 如第一种. 而引用类型则是先装箱再赋值

C#高级(七)类型强制转换,拆箱,装箱

一.装箱和拆箱 装箱就是 将值类型转换为引用类型.拆箱就是 将引用类型转换为值类型. 比如我们非常常用的 .ToString() 方法,就是典型的一个装箱的过程. 再如下面的例子 int i=10; object y=(object) i ; //这就是装箱 int x=(int)y; //这是拆箱. 二.对象的相等比较 在C#中,有四种比较相等的方法. 1.ReferenceEquals() 该方法是一个静态方法,用来判断两个引用是否指向同一个实例.也就是是否 指向同一个内存地址,如果是,则返

关于Visual C#装箱与拆箱的研究

visual 关于Visual C#装箱与拆箱的研究2004-09-15 作者: 出处: CSDN 在对这个问题展开讨论之前,我们不妨先来问这么几个问题,以系统的了解我们今天要探究的主题. 观者也许曾无数次的使用过诸如System.Console类或.NET类库中那些品种繁多的类.那么,我想问的是它们究竟源自何处?C#又是如何联系它们?有没有支持我们个性化扩展的机制或类型系统?又有哪些类型系统可供我们使用呢?如果我们这些PL们连这些问题都不知其然,更不知其所以然的话,C#之门恐怕会把我们拒之门外

[CLR via C#]5.3 值类型的装箱和拆箱

原文:[CLR via C#]5.3 值类型的装箱和拆箱 在CLR中为了将一个值类型转换成一个引用类型,要使用一个名为装箱的机制. 下面总结了对值类型的一个实例进行装箱操作时内部发生的事: 1)在托管堆中分配好内存.分配的内存量是值类型的各个字段需要的内存量加上托管堆上的所有对象都有的两个额外成员(类型对象指针和同步块索引)需要的内存量. 2)值类型的字段复制到新的分配的堆内存. 3)返回对象的地址.现在,这个地址是对一个对象的引用,值类型现在是一个引用类型. 拆箱不是直接将装箱过程倒过来.拆箱

Java中的装箱与拆箱

在J2SE5.0后推出了自动装箱和拆箱的功能,以提高我们的开发效率,然而自动装箱和拆箱实际上是通过编译器来支持的(并非语言本身,或者说虚拟机),因而这种支持也隐藏了部分内部实质,再加上某些类的优化(比如Integer里面的缓存等,参看关于缓存节),就更加容易在特定的环境下产生问题,并且如果不知道原来还无法调试.以下先是简单的介绍了编译器对装箱和拆箱的实现,并根据实现简单介绍一下可能会遇到的几个问题. 装箱和拆箱实现 以下装箱和拆箱代码:        Object value = 10;    

自动装箱与拆箱引发的享元设计模式

/** * 自动装箱与拆箱 */ public class Autoboxing { public static void main(String[] args) { Integer num1 = 20; //自动装箱 int num2 = new Integer(20); //自动拆箱 System.out.println(num2 == num1); //true //-128~127之间的同一个Intege对象相比为true Integer num3 = 128; Integer num4

java装箱和拆箱

java是一门面向对象的编程语言,在java中一切皆对象.但是美中不足的是java的基本类类型不是引用类型.为了彻底的使java面向对象,java发明了与基本类型对应的封装类型.例如java中的List集合,在这个集合中存入的都是对象类型,如果这个时间想存入数字到集合中就必须手动转换一下,将java中的对象类型转换成相应的封装类.这个是解决了List集合只能存入对象的问题. 写代码的人都有一个梦想就是写出简洁,优雅的代码以便于后期维护和阅读,上面的方法虽然解决了问题但是太不简洁了,这个时候不知哪