C#裝箱和拆箱(裝箱和拆箱對應用程序性能的影響)

一、裝箱和拆箱到底是什麼?

         裝箱(box):把值類型對象轉爲引用類型的對象;
         拆箱(unbox):把引用類型對象轉爲值類型的對象。

 

二、裝箱和拆箱的實際運用

        下面是我們常寫的代碼,那麼在這個過程中,裝箱和拆箱到底是怎麼轉換的呢?

                int n = 2;
                object obj = (object)n;//裝箱,把數值類型int轉換爲引用類型object對象的。
                int m = (int)obj;//拆箱,把引用類型的object轉換爲int類型。

         我們可以看看C#代碼被編譯爲中間語言IL,就很清楚裝箱和拆箱的過程:

 

三、實際編碼過程中到底哪些是裝箱和拆箱呢?

1、引用類型之間不屬於裝箱和拆箱,裝箱、拆箱必須是: 值類型→引用類型  或  引用類型→值類型。

            Person p=new Student();//這個叫隱式類型轉換,不叫裝箱。
            Student stu=(Student)p;//這個叫顯示類型轉換,不叫拆箱。
2、方法重載時,如果具有該類型的重載,那麼就不叫拆箱或裝箱。
            int n=10; Console.WriteLine(n);//沒有發生裝箱,因爲方法重載。
3、接口與值類型之間的裝箱與拆箱。
            int n = 2;
            IComparable c = n;
            int m = (int)c;
            Console.WriteLine(m.ToString());
 

四、頻繁裝箱和拆箱會對程序性能造成什麼影響?

        頻繁的拆箱和裝箱會對系統性能造成什麼影響?下面我們就從運行時間方面對其性能進行分析,

 

        從上面運行的時間我們可以清楚的看出頻繁的進行裝箱和拆箱對引用程序運行的時間有很大的區別,因此,要寫一個高效的高性能的軟件,要注意裝箱和拆箱對應用程序造成的影響。
發佈了28 篇原創文章 · 獲贊 4 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章