封箱和拆箱
来源:互联网 发布:淘宝下架排名靠前 编辑:程序博客网 时间:2024/04/27 20:15
装箱和拆箱机制使得在C#类型系统中,任何值类型,引用类型和object类型之间进行转换,简单地说,有了装箱和拆箱的概念,对任何类型的值来说,最终我们都可以看作是object类型.
装箱转换是指将一个值类型隐式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型,把一个值类型的值装箱,也就是创建一个object实例并将这个值复制给这个object.
拆箱和装箱正好相反,拆箱转换是指将一个对象类型显式转换成一个值类型,或是将一个接口类型显式转换成一个执行该接口的值类型.拆箱的过程分为两步,首先,检查这个对象实例,看它是否为给定的值类型的装箱值,然后,把这个实例的值拷贝给值类型的变量.
Demo
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
...{
}
}
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# 封箱和拆箱
- java的封箱和拆箱
- String和int拆箱和封箱的疑问
- c#经典入门学习笔记-封箱和拆箱
- 拆箱封箱的作用
- Java的装箱和封箱
- 隐式转换和自动封箱
- 使用jdk1.5封箱及拆箱功能时注意的问题
- C#的基本类型的封箱(boxing)与拆箱(unboxing)
- Long.ValueOf("String") Long.parseLong("String") 区别 看JAVA包装类的封箱与拆箱
- 黑马程序员 关于包装类的自动封箱与拆箱操作需要注意的地方
- 从Long.ValueOf("String")与Long.parseLong("String")看JAVA包装类的封箱与拆箱
- 从Long.ValueOf("String")与Long.parseLong("String")看JAVA包装类的封箱与拆箱
- 从Long.ValueOf("String")与Long.parseLong("String")看JAVA包装类的封箱与拆箱
- Integer的自动封箱
- C# 封箱与装箱操作
- 7-Javascript积累
- fatal error C1076: compiler limit (转)
- 帝国2
- 盖茨给职场新人的10句话
- Linux下的解压命令(ZZ)
- 封箱和拆箱
- ORACLE数据库中为每个数据表建立序列字段插入值的触发器的SQL脚本
- control userpasswords2实现winXP自动登录
- 创建动态的XML数据
- 自己用java弄的一个贪吃蛇游戏
- ext:初学(1)
- JAVA技术讲座-先听课,学会了再付钱。
- ajax_in_action英文版电子书,很经典的一本书
- WebRequest WebResponse WebClient 实例