C#裝箱和拆箱
C#裝箱和拆箱機(jī)制使得在C#類型系統(tǒng)中,任何值類型,引用類型和object類型之間進(jìn)行轉(zhuǎn)換,簡單地說,有了C#裝箱和拆箱的概念,對(duì)任何類型的值來說,最終我們都可以看作是object類型.
裝箱轉(zhuǎn)換是指將一個(gè)值類型隱式地轉(zhuǎn)換成一個(gè)object類型,或者把這個(gè)值類型轉(zhuǎn)換成一個(gè)被該值類型應(yīng)用的接口類型,把一個(gè)值類型的值裝箱,也就是創(chuàng)建一個(gè)object實(shí)例并將這個(gè)值復(fù)制給這個(gè)object.
C#裝箱和拆箱正好相反,拆箱轉(zhuǎn)換是指將一個(gè)對(duì)象類型顯式轉(zhuǎn)換成一個(gè)值類型,或是將一個(gè)接口類型顯式轉(zhuǎn)換成一個(gè)執(zhí)行該接口的值類型.拆箱的過程分為兩步,首先,檢查這個(gè)對(duì)象實(shí)例,看它是否為給定的值類型的裝箱值,然后,把這個(gè)實(shí)例的值拷貝給值類型的變量.
- 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; //封箱;從值類型轉(zhuǎn)換到object類型
- Mystruct s1 =(Mystruct)ob; //拆箱 從object類型轉(zhuǎn)換到值類型
- 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#裝箱和拆箱內(nèi)容就介紹到這里,希望對(duì)大家有所幫助。
【編輯推薦】