《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#
- C#學習筆記之值型別與引用型別C#筆記型別
- 《論語》讀書筆記筆記
- 《Effective C#》讀書筆記C#筆記
- Raft論文讀書筆記Raft筆記
- 《如何有效閱讀一本書》讀書筆記筆記
- 惠普筆記本型號全解析筆記
- 《More Effective C#》讀書筆記C#筆記
- 【記】《.net之美》之讀書筆記(二) C#中的泛型筆記C#泛型
- 筆記.如何閱讀一本書筆記
- 深入剖析Tomcat讀書筆記(1)——tomcat的連線本質Tomcat筆記
- C#本質論學習 ☞二C#
- C#本質論學習 ☞三C#
- c#:值型別&引用型別C#型別
- 《如何閱讀一本書》讀書筆記完整版筆記
- 人月神話讀書筆記(四) (轉)筆記
- 好的書要讀三遍——《Learning hard C#學習筆記》書評兼論讀書方法C#筆記
- C#的型別——值型別與引用型別C#型別
- 《圖解HTTP》讀書筆記四:HTTP 首部圖解HTTP筆記
- 【C#之值型別vs引用型別】C#型別
- 《Go 語言程式設計》讀書筆記 (一)基礎型別和複合型別Go程式設計筆記型別
- 《怎樣閱讀一本書》的筆記筆記
- fluent python 讀書筆記 2–Python的序列型別2Python筆記型別
- fluent python讀書筆記2—Python的序列型別1Python筆記型別
- C#高階程式設計 讀書筆記C#程式設計筆記
- 【C#學習筆記】型別轉換C#筆記型別
- 關於漏洞挖掘理論的讀書筆記筆記
- 讀書筆記...筆記
- 讀書筆記筆記
- Js基礎---紅寶書讀書日記(1)-------基本型別和引用型別JS型別
- C# 物件比較(值型別、引用型別)C#物件型別
- 《讀書與做人》讀書筆記筆記
- fluent python 讀書筆記 2--Python的序列型別2Python筆記型別
- fluent python讀書筆記2---Python的序列型別1Python筆記型別
- 《3分鐘識別人才》讀書筆記筆記
- C#變數型別(1):引用型別和值型別 (轉)變數型別
- 維修筆記本的技巧 筆記本維修解析辦法筆記