平時new算是使用非常頻繁的一個關鍵字
這裡只是描述 new object() 這種類型的作用
其他的暫時不涉及到,
本文的內容也比較簡單,就列出了一些常用的流程
1.在第一次訪問某個程序集的時候 (會加載對應的程序,例如需要new的對象在其他的dll裡面)
其實步驟一中有很多其他的內容,不過這裡就不詳細描述了,因為用的比較少
如果找不到dll這個時候就會拋出異常
2.給所有靜態成員賦值(static)
在c#中賦值的順序看起來和代碼從上至下的順序一模一樣,不過不保證以後的.net版本和編譯器也是這樣,因此不要依賴於代碼的先後關系
3.調用靜態構造函數(..ctor)
靜態構造函數自始至終只調用一次. 如果如果要搞單例模式,放在這裡初始化也是ok的,
靜態構造函數如果拋出異常....那麼在本次應用程序的生命周期中,這個類的所有成員將都不能訪問,一訪問就會拋出異常System.TypeInitializationException.
所以在靜態構造函數中需要謹慎,最好是try catch,如果不是非常嚴重的錯誤的話.
第2點中說的先後關系可以放在構造函數中順序執行
4.如果這個類有父類,那麼先調用父類的構造函數,(如果父類還有父類,那麼繼續調用父類的父類的.......)
一路調用到最高級別,如果想調用父類的特定構造函數 可以使用base(.....)
5.初始化所有實例成員
6.如果存在this(...) 代表要先調用其他構造函數
7.最後開始調用構造函數
一般來說構造函數要盡量的輕量級,
這裡忽略了很多關於詳細的內容,例如 靜態構造函數(也就是類型構造函數) 中具體做了一些什麼
PS1: 值類型也是可以 int i = new int(); 不過實際上和int i=0; 沒區別.當然你自己定義的值類型是可以弄一些有用的構造函數的
PS2: 這裡也省略了很多關於內存分配