C#装箱和拆箱(值类型和引用类型之间的转换)

面向对象编程中,封箱指把非对象类型的数值或数据,包装成对象类型反之,拆箱指把对象类型拆成非对象的数值或数据。

例子:定义一个Circle 类

 1   class Circle
 2     {
 3         double radius;
 4         public Circle(double param)
 5         {
 6             radius = param;
 7         }
 8
 9         public double Area()
10         {
11             return Math.PI * radius * radius;//圆的面积
12         }
13     }
 1     static void Main(string[] args)
 2         {
 3             Circle c = new Circle(5);
 4             Console.WriteLine(c.Area());
 5
 6             int i = 10;
 7             Object o = i;//装箱操作,将整形变量i赋值给object类型 o
 8             Console.WriteLine(o.ToString());
 9             int j = (int)o;//拆箱操作,将Object类型变量o,拆箱赋给整形变量j;
10             Console.WriteLine(j);
11           }

安全的数据类型转换方法:

is运算符,判断变量是否为指定数据类型。

 1             o = c;
 2             if (o is int)
 3             {
 4                 int k = (int)o;
 5             }
 6             else if (o is Circle)
 7             {
 8                 Circle c2 = (Circle)o;
 9                 Console.WriteLine(c2.Area());
10             }

as运算符。as 运算符类似于强制转换操作。但是,如果无法进行转换,则 as 返回 null

 1  int? k = o as int?; //int类型无法存储Null型;
 2             if (k != null)
 3             {
 4                 Console.WriteLine(k);//说明转换成功,打印k的值。
 5             }
 6             else
 7             {
 8                 Circle c2 = o as Circle;
 9                 if (c2 != null)
10                 {
11                     Console.WriteLine(c2.Area());
12                     Console.ReadKey();
13                 }
14             }
时间: 2024-08-04 04:56:11

C#装箱和拆箱(值类型和引用类型之间的转换)的相关文章

C# 知识回顾 - 装箱与拆箱

装箱与拆箱 目录 生活中的装箱与拆箱 C# 的装箱与拆箱 值类型和引用类型 装箱 拆箱 读者见解 生活中的装箱与拆箱    我们习惯了在网上购物,这次你想买本编程书 -- <C 语言从入门到放弃> ,下单成功后,卖家会帮你将这本入坑指南打好包装,我们可以称之为装箱:经过快递员的快马加鞭,风雨无阻,包裹就直接送到你手上了.你一定会以迅雷不及掩耳盗铃儿响叮当之势拆开包装,这个过程我们可以称之为拆箱,这时,入坑指南就顺利的送到你手上. C# 的装箱与拆箱 装箱:将值类型(如 int ,或自定义的值类

C#之装箱与拆箱

C#中值类型和和引用类型实质上是同源的,所以不但可以从值类型和引用类型之间进行转换,也可以在值类型和引用类型之间进行转换.,但是两者使用的内存类型不同,使他们的转换变得复杂. 1.装箱: 在C#中通常将值类型转换成引用类型叫做装箱. C#中值类型装箱为引用类型的过程如下: 在托管堆中创建一个新的对象实例,并分配相应的内存. 将值类型变量值复制到对象实例中. 将对象实例地址压入堆栈中,并指向一个引用类型. using System; using System.Collections.Generic

值类型的装箱与拆箱浅析

值类型的装箱与拆箱浅析 2012-02-23 15:47 by 秋梧, ... 阅读, ... 评论, 收藏, 编辑 阅读目录 前言 值类型的装箱 值类型的拆箱 装箱和拆箱实例 结束语 前言 在.Net 中值类型向引用类型的转换以及从引用类型到值类型的转换是需要装箱(boxing)和拆箱(unboxing)的,这是因为值类型是比引用类型更轻型的一种类型,因为他们不想对象那样在托管队中分配,不会被GC收集,而且不需要通过指针来引用.但是在许多情况下都需要获取对值类型的一个实例的引用.对于在值类型与

C#---装箱和拆箱

装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作.  1. 装箱在值类型向引用类型转换时发生 2. 拆箱在引用类型向值类型转换时发生 光上述两句话不难理解,但是往深处了解,就需要一些篇幅来解释了. 我们先看装箱时都会发生什么事情,下面是一行最简单的装箱代码 ? object obj = 1; 这行语句将整型常量1赋给object类型的变量obj: 众所周知常量1是值类型,值类型是要放在栈上的,而object是引用类型,它需要放在堆上:要把值类型放在堆上就需要执行一次装箱操作. 这行语句的I

[DotNet]深入理解C#的装箱和拆箱

装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作.  1. 装箱在值类型向引用类型转换时发生 2. 拆箱在引用类型向值类型转换时发生 光上述两句话不难理解,但是往深处了解,就需要一些篇幅来解释了. 我们先看装箱时都会发生什么事情,下面是一行最简单的装箱代码 object obj = 1; 这行语句将整型常量1赋给object类型的变量obj: 众所周知常量1是值类型,值类型是要放在栈上的,而object是引用类型,它需要放在堆上:要把值类型放在堆上就需要执行一次装箱操作. 这行语句的IL代

装箱和拆箱-----------操作和概念

-------装箱和拆箱--------- 数据类型按照存储 方式 可以分为值类型和引用类型,两者仍然可以相互转换,将值类型转换为引用类型的过程称为装箱.反之则为拆箱. static void Main(string[] args){ int i=123; object o=i ; //装箱 int i = (int)0 ;/.拆箱 } --解析:因为i是值类型,所以只能够改变它自己的值,而无法修改应用类型object的类型,可以理解为创建一个object实例,并将i的值复制给这个object.

C#装箱与拆箱总结

装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作.  1. 装箱在值类型向引用类型转换时发生 2. 拆箱在引用类型向值类型转换时发生 光上述两句话不难理解,但是往深处了解,就需要一些篇幅来解释了. 我们先看装箱时都会发生什么事情,下面是一行最简单的装箱代码 object obj = 1; 这行语句将整型常量1赋给object类型的变量obj: 众所周知常量1是值类型,值类型是要放在栈上的,而object是引用类型,它需要放在堆上:要把值类型放在堆上就需要执行一次装箱操作. 这行语句的IL代

C#之装箱和拆箱

在实际编码过程中,有时候会出现装箱和拆箱操作.下面就类分别认识一下: 需要注意的是,类型转换和这个是不同的.Convert方法并没有发生装箱和拆箱操作,而是类型转换,包括int.parse等等. 装箱,是把值类型拷贝了一个副本放在堆内存中. 拆箱,在引用类型直接找到值类型存储的位置(Person对象是引用类型,但其Age属性是值类型,也存储在堆内存中),实际上我们往往拆箱后会用一个值类型变量接收它. 例1: 1 int n = 10; 2 Console.WriteLine(n); 3 obje

全面理解java自动装箱和拆箱(转)

自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象.自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接. 如果你在Java1.5下进行过编程的话,你一定不会陌生这一点,你不能直接地向集合(Collections)中放入原始类型值,因为集合只接收对象.通常这种情况下你的做法是,将这些原始类型的值转换成对象,然后将这些转换的对象放入集合中.使用Integer,Double,Boolean等这些类我们可以将原始