《C#本質論》讀書筆記<四>值型別再解析
不要建立消耗記憶體大於16位元組的值型別
值型別在佔用記憶體比較小時,效能比較快, 記憶體比較大(16位元組)時,反而不一定效能好
值型別與引用型別記憶體分佈示意圖
值型別在棧中,用完即可回收。
引用型別在棧中有個引用,引用的大小與處理器的位數一致。該引用指向堆中具體的記憶體塊。
要建立不變得值型別
結構體Struct
結構體與類的比較
結構體的欄位需要全部直接初始化(復看不太理解,挖個坑)
結構體的欄位不許有預設值,因為初始化時會賦予型別對應預設值。
在所有的欄位初始化完之前,訪問this是非法的
new值型別與new引用型別的區別
裝箱和拆箱
裝箱和拆箱都需要拷貝(儘量避免)
裝箱是記憶體申請和記憶體拷貝
拆箱是記憶體檢查和記憶體拷貝
拆箱(unbox)的內部過程:
(1)因為一個物件將被轉換,所以編譯器必須先判斷堆疊上指向合法物件的地址,以及這個物件型別是否可以轉換為MSL unbox指令呼叫中指定的值型別。如果檢查失敗就丟擲InvalidCastException異常。
(2)校驗通過後,就返回指向物件內的值的指標。可以看出,裝箱操作會建立轉換型別的副本,而拆箱就不會。不過注意一下,在我們裝箱的時候是先把變數i的值複製了一份賦給ob的,所變數j拿到的是ob這個變數的引用。也就是後面再改變i的值並不會影響j的值,但是改變ob的值就會。
拆箱時要求必須要拆為原來裝箱時的型別
哪怕拆為可以隱式轉型的型別,也無法編譯通過;
(例如int裝箱成的Object無法直接拆為double,儘管int可以隱式轉為double)
列舉
列舉和字串的互轉
-
列舉可以直接ToString轉為字串
-
字元轉為列舉需要Enum.Parse
相關文章
- C#學習筆記之值型別與引用型別C#筆記型別
- 《論語》讀書筆記筆記
- Raft論文讀書筆記Raft筆記
- 《如何有效閱讀一本書》讀書筆記筆記
- 【記】《.net之美》之讀書筆記(二) C#中的泛型筆記C#泛型
- c#:值型別&引用型別C#型別
- fluent python讀書筆記2—Python的序列型別1Python筆記型別
- fluent python 讀書筆記 2–Python的序列型別2Python筆記型別
- C#高階程式設計 讀書筆記C#程式設計筆記
- 《Go 語言程式設計》讀書筆記 (一)基礎型別和複合型別Go程式設計筆記型別
- 讀書筆記筆記
- Js基礎---紅寶書讀書日記(1)-------基本型別和引用型別JS型別
- 《讀書與做人》讀書筆記筆記
- C程式設計語言讀書筆記:型別運算子與表示式C程式程式設計筆記型別
- [swift 進階]讀書筆記-集合型別協議 C3P5_專門的集合型別Swift筆記型別協議
- 《Go 語言程式設計》讀書筆記(四)介面Go程式設計筆記
- webpackDemo讀書筆記Web筆記
- Vue讀書筆記Vue筆記
- 散文讀書筆記筆記
- Cucumber讀書筆記筆記
- HTTP 讀書筆記HTTP筆記
- postgres 讀書筆記筆記
- 讀書筆記2筆記
- 讀書筆記3筆記
- 事務隔離級別讀書筆記分享筆記
- 【記】《.net之美》之讀書筆記(一) C#語言基礎筆記C#
- [swift 進階]讀書筆記-集合型別協議 C3P1_序列Swift筆記型別協議
- Hellow C# unity學習記錄(7)值型別引用型別以及引數傳遞C#Unity型別
- 維度處理-資料倉儲-讀書筆記(四)筆記
- Java 併發程式設計實踐 讀書筆記四Java程式設計筆記
- 【Laravel】Laravel 框架關鍵技術解析·讀書筆記(二)Laravel框架筆記
- TypeScript 學習筆記 — 函式中的型別(四)TypeScript筆記函式型別
- 型別的本質:對變數、型別、指標的理解型別變數指標
- ISLR讀書筆記七:線性判別分析(LDA)筆記LDA
- js高程讀書筆記JS筆記
- 《重構》讀書筆記筆記
- PMBook讀書筆記(一)筆記
- 筆記本的CPU型號筆記