C#裝箱和拆箱
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#裝箱和拆箱內容就介紹到這里,希望對大家有所幫助。
【編輯推薦】