C#的装箱转换

装箱转换是指将一个值类型隐式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型(interface-type)。把一个值类型的值装箱,也就是创建一个object实例并将这个值复制给这个object,比如:

int i=10;
object obj=i;

用下图可以表示装箱的过程:

 

我们也可以用显式的方法来进行装箱操作:

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

我们可以假想存在一个boxing类型,其声明如下:

class T_Box
{
    T value;
    T_Box(Tt){
    value=t;
}//该类型的构造函数
}
这里T表示将要装箱的值的类型,它可以是int、char、enum等等。现在我们要将类型为T的值v装箱,其执行过程为:执行new T_Box(v),将返回结果的实例作为对象类型的值,那么下面的语句:

int i=10;
object obj=i;

等价于:

int i=10;
object obj=new int_Box(i); //装i装箱成对象obj

我们看一下下面的程序。

程序清单4-4:

using System
class Test{
  public static void Main(){
    int i=10;
    object obj=i; //对象类型
    if(obj is int){
      Console.Write("The value of i is boxing!");
    }
    i=20;  //改变i的值
    Console.WriteLine("int:i={0}",i);
    Console.WriteLine("object:obj={0}",obj);
    }
}

输出结果为:

The value of i is boxing!
int:i=20;
object:obj=10;

这就证明了,被装箱的类型的值是作为一个拷贝赋给对象的。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, object
, 类型
, obj
, 装箱
一个
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2025-01-29 18:58:57

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

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

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

C#的拆箱转换

和装箱转换正好相反,拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口的值类型. 拆箱的过程分为两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值.然后,把这个实例的值拷贝给值类型的变量. 我们举个例子来看看一个对象拆箱的过程. int i=10; object obj=i; int j=(int)obj; 这个过程用图来表示就是:   可以看出拆箱过程正好是装箱过程的逆过程.必须注意,装箱转换和拆箱转换必须遵循类型兼容原则.

java自动装箱拆箱深入剖析_java

这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆: java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装箱,解包装称为拆箱): 其实按照我自己的理解自动装箱就可以简单的理解为将基本数据类型封装为对象类型,来符合java的面向对象:例如用int来举例: 复制代码 代码如下: //声明一个Integer对象 Integer num = 10; //以上的声明就是用到了自动的装箱:解析为 Integer nu

针对 Java 开发人员的 C# 编程语言

编程 本文讨论 Java 和 C# 之间的异同点,目的在于当迁移到 .NET 时,让 Java 开发人员掌握所涉及的一些知识.Java 和 C# 之间的主要相似点是: • Java 和 C# 都源于 C++,并且共有 C++ 的一些特征. • 两种语言都需要编译成中间代码,而不是直接编译成纯机器码.Java 编译成 Java 虚拟机 (Java Virtual Machine, JVM) 字节码,而 C# 则编译成公共中间语言 (Common Intermediate Language, CIL

c#学习笔记(1)

笔记   1, 结构(struct) 与 类(class)[attributes] [modifiers] struct identifier [:interfaces] body [;]结构与类很相似,都表示可以包含数据成员和函数成员的数据结构.与类不同的是,结构是值类型并且不需要堆分配.结构类型的变量直接包含结构的数据,而类类型的变量包含对数据的引用(该变量称为对象). struct 类型适合表示如点.矩形和颜色这样的轻量对象.尽管可能将一个点表示为类,但结构在某些方案中更有效.在一些情况下

向Visual Basic程序员介绍泛型(二)

visual|程序|程序员 (接上篇) 正如你所见,泛型使用起来很简单.强类型化的代码可以避免运行时错误:智能感知会工作得更好.虽然使用泛型已经有非常充分的理由,不过使用泛型还有更多的优点:性能和代码重用. 将泛型技术引入.Net框架的一个主要原因是为了提高性能.比如集合类可以比以前工作得更快,因为编译器能够针对集合所储存的类型进行优化.下面的代码比较了数组.ArrayList以及泛型List的性能: txtOutput.Text = "Performance" & vbCrL

C#2.0 Specification(泛型二)

接(泛型一)这篇文章是翻译的微软的技术文章.供学习c#的朋友参考,请勿用于商业目的.http://msdn.microsoft.com/vcsharp/team/language/default.aspx20.1.6泛型类中的静态构造函数在泛型类中的静态构造函数被用于初始化静态字段,为每个从特定泛型类声明中创建的不同的封闭构造类型,执行其他初始化.泛型类型声明的类型参数在作用域之内,可以在静态构造函数体内被使用. 如果下列情形之一发生,一个新的封闭构造类类型将被首次初始化. 一个封闭构造类型的实