腳踏實地學C 3 裝箱和拆箱

2022-01-11 12:06:54 字數 1586 閱讀 1779

裝箱:一種接受值型別的值,根據這個值在堆中建立乙個完整的引用型別物件並返回物件的引用(堆位址)的隱式轉換

int i_number = 2; //在棧中宣告int型別i_number變數並初始化

object o_number = null; //在棧中宣告object型別的o_number變數並初始化值為null,不在堆中分配記憶體

o_number = i_number; //裝箱過程 如下圖所示①→②→③

裝箱過程:1.在託管堆分配好記憶體,分配的記憶體量是值型別的字段需要的記憶體量(型別物件指標和同步索引塊);

2.值型別的字段複製到新分配的堆記憶體;

3.將新分配的堆位址放入棧中的變數內;

拆箱:將裝箱的物件轉換為值型別的過程(顯示轉換)

object o_number = 1; //裝箱

int i_number = (int)o_number; //拆箱

console.writeline(i_number);

拆箱過程:1.獲取已裝箱的物件各個欄位的位址;

2.將字段包含的值複製到值型別的例項中;

裝箱和拆箱測試

class program

private static void valuetypetestmethod()

list = null;

}using (new operationtimer("arraylist type(int)"))

arraylist = null;

}}

}internal sealed class operationtimer : idisposable

public void dispose()

seconds (gc=) ", (stopwatch.gettimestamp() - m_starttime) / (double)stopwatch.frequency, gc.collectioncount(0) - m_collectioncount, m_msg);

}private static void prepareforoperation()

}

集合listarraylist時間(s)

垃圾**次數

時間(s)

垃圾**次數

64位程式

.203

1.37

4432位程式

.223

1.57

23注意:從上面測試看出list和arraylist在所耗時間和垃圾**區別都是在很大的,所以用泛型list代替arraylist是乙個很好的習慣!同時也避免在迴圈中大量的裝箱和拆箱操作;

腳踏實地學C 4 靜態類

起因 問 靜態類可以實現介面及繼承?答 都不可以 思考 為什麼不可以呢?學習靜態類,有時我們又稱為工具類 密封抽象類 從msdn文件沒有直接靜態類的定義,這裡只能說用static 不能用於結構,只能用於類 關鍵字宣告的類,就是靜態類。靜態類與非靜態類的區別 靜態類不能例項化,就是不能通過使用 new...

腳踏實地學C 2 引用型別和值型別

引用型別和值型別介紹 clr支援兩種型別,引用型別和值型別兩種基本的型別 值型別下有int double 列舉等型別同時也可以稱為結構,如int結構型別 double結構型別,所有的值型別都是隱式密封 sealed 的,防止將乙個值型別作其他引用型別或值型別的基類。任何成為類的都是引用型別。如str...

腳踏實地小組的漏洞復現報告

1.1專案背景 1.2實施目的 1 熟悉用dedecms搭建 2 熟悉burp工具的使用方法 3 會使用工具進行主機漏洞的抓包 4 通過實驗了解如何提高主機的安全性 漏洞是指使用者的windows作業系統程式或者其它應用程式在邏輯設計上的缺陷或在編寫時產生的錯誤,這個缺陷或錯誤可能被不法者或者電腦黑...