C#装箱和拆箱机制使得在C#类型系统中,任何值类型,引用类型和object类型之间进行转换,简单地说,有了C#装箱和拆箱的概念,对任何类型的值来说,最终我们都可以看作是object类型.
装箱转换是指将一个值类型隐式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型,把一个值类型的值装箱,也就是创建一个object实例并将这个值复制给这个object.
C#装箱和拆箱正好相反,拆箱转换是指将一个对象类型显式转换成一个值类型,或是将一个接口类型显式转换成一个执行该接口的值类型.拆箱的过程分为两步,首先,检查这个对象实例,看它是否为给定的值类型的装箱值,然后,把这个实例的值拷贝给值类型的变量.
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- namespace WindowsApplication2
- ...{
- public partial class Form1 : Form
- ...{
- public Form1()
- ...{
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- ...{
- Checker c = new Checker();
- ClassA ca=new ClassA();
- Mystruct s = new Mystruct();
- IClassB ib =ca; //封箱;
- object ob =s; //封箱;从值类型转换到object类型
- Mystruct s1 =(Mystruct)ob; //拆箱 从object类型转换到值类型
- c.Getcheck(s1);
- }
- }
- public class Checker
- ...{
- public Checker()
- ...{
- }
- public void Getcheck(object par)
- ...{
- if (par is ClassA)
- ...{
- MessageBox.Show("YES,ClassA");
- }
- else
- ...{
- MessageBox.Show("NO,ClassA");
- }
- if (par is IClassB)
- ...{
- MessageBox.Show("YES,IClassB");
- }
- else
- ...{
- MessageBox.Show("NO,IClassB");
- }
- if (par is Mystruct)
- ...{
- MessageBox.Show("YES,Mystruct");
- }
- else
- ...{
- MessageBox.Show("NO,Mystruct");
- }
- }
- }
- public class ClassA:IClassB
- ...{
- }
- public class ClassB:IClassB
- ...{
- }
- interface IClassB
- ...{
- }
- struct Mystruct
- ...{
- }
- }
C#装箱和拆箱内容就介绍到这里,希望对大家有所帮助。
【编辑推荐】