C#装箱和拆箱

开发 后端
本文介绍了C#装箱和拆箱的概念,并且举了一个实例进行补充说明,希望对大家有用。

C#装箱和拆箱机制使得在C#类型系统中,任何值类型,引用类型和object类型之间进行转换,简单地说,有了C#装箱和拆箱的概念,对任何类型的值来说,最终我们都可以看作是object类型.  

装箱转换是指将一个值类型隐式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型,把一个值类型的值装箱,也就是创建一个object实例并将这个值复制给这个object.  

C#装箱和拆箱正好相反,拆箱转换是指将一个对象类型显式转换成一个值类型,或是将一个接口类型显式转换成一个执行该接口的值类型.拆箱的过程分为两步,首先,检查这个对象实例,看它是否为给定的值类型的装箱值,然后,把这个实例的值拷贝给值类型的变量.

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Text;  
  7. using System.Windows.Forms;  
  8.  
  9. namespace WindowsApplication2  
  10. ...{  
  11.     public partial class Form1 : Form  
  12.     ...{  
  13.         public Form1()  
  14.         ...{  
  15.             InitializeComponent();  
  16.         }  
  17.  
  18.         private void Form1_Load(object sender, EventArgs e)  
  19.         ...{  
  20.             Checker c = new Checker();  
  21.             ClassA ca=new ClassA();  
  22.             Mystruct s = new Mystruct();  
  23.             IClassB ib =ca;  //封箱;  
  24.             object ob =s;  //封箱;从值类型转换到object类型  
  25.             Mystruct s1 =(Mystruct)ob;  //拆箱  从object类型转换到值类型  
  26.             c.Getcheck(s1);  
  27.         }  
  28.     }  
  29.     public class Checker  
  30.     ...{  
  31.         public Checker()  
  32.         ...{  
  33.    
  34.         }  
  35.         public void Getcheck(object par)  
  36.         ...{  
  37.             if (par is ClassA)  
  38.             ...{  
  39.                 MessageBox.Show("YES,ClassA");  
  40.             }  
  41.             else 
  42.             ...{  
  43.                 MessageBox.Show("NO,ClassA");  
  44.             }  
  45.             if (par is IClassB)  
  46.             ...{  
  47.                 MessageBox.Show("YES,IClassB");  
  48.             }  
  49.             else 
  50.             ...{  
  51.                 MessageBox.Show("NO,IClassB");  
  52.             }  
  53.             if (par is Mystruct)  
  54.             ...{  
  55.                 MessageBox.Show("YES,Mystruct");  
  56.             }  
  57.             else 
  58.             ...{  
  59.                 MessageBox.Show("NO,Mystruct");  
  60.             }  
  61.         }  
  62.     }  
  63.     public class ClassA:IClassB  
  64.     ...{  
  65.           
  66.     }  
  67.     public class ClassB:IClassB  
  68.     ...{  
  69.  
  70.     }  
  71.     interface IClassB  
  72.     ...{  
  73.  
  74.     }  
  75.     struct Mystruct  
  76.     ...{  
  77.    
  78.     }  

C#装箱和拆箱内容就介绍到这里,希望对大家有所帮助。

【编辑推荐】

  1. 总结C#哈希表的用法
  2. 不一样的入门:看C# Hello World的17种写法
  3. 什么是WMI?及其示例
  4. 从C#到C++容易出现的问题解答
  5. 浅议.NET、ASP.NET和C#的关系
责任编辑:book05 来源: csdn
相关推荐

2009-09-01 17:51:47

C#拆箱C#装箱

2009-08-28 11:22:11

C#装箱和拆箱

2009-08-06 15:40:11

C#装箱和拆箱

2009-10-22 19:11:25

CLR Via C#教

2021-09-06 14:30:34

C#装箱拆箱

2012-03-26 11:32:45

Java

2020-11-02 13:06:42

Java装箱拆箱

2015-09-02 10:12:54

Java自动装箱拆箱

2009-08-11 15:17:12

C#基础知识

2010-05-04 08:58:02

.NET

2009-08-11 14:20:41

C# .NET学习经验

2009-08-13 17:04:09

C#语言C#程序

2009-08-27 16:11:03

C# delegateC# event

2009-07-07 17:56:00

JDK1.5封箱及拆箱

2009-08-26 10:34:15

C#类型C#变量

2009-08-19 16:50:32

Visual C#C#语言特性

2021-02-28 21:47:51

Java语法糖算数

2009-08-10 10:04:25

C#抽象类C#接口

2019-10-30 16:03:48

JavaJava虚拟机数据库

2009-08-27 16:18:47

C#类C#结构体
点赞
收藏

51CTO技术栈公众号