CLR via C 第五章學習記錄(更新中)

2022-07-12 21:15:23 字數 1615 閱讀 6893

1.設定全域性溢位檢查,專案屬性->生成->高階->檢測運算上溢/下溢

2.區域性使用溢位檢測

byte b = 100

;b = checked((byte)(b + 200));//

不檢測溢位

checked

//檢測溢位**段

——————————————————————————

uint32 invalid = unchecked((uint32)(-1));//

檢測溢位

unchecked

//不檢測溢位**段

clr支援2種型別:引用型別和值型別

引用型別總是從託管堆分配,c#的new操作符返回物件記憶體位址——即指向物件的記憶體位址。使用引用型別必須留意效能問題。注意4個事實

1.記憶體必須從託管堆分配(new的時候進行記憶體分配)

2.堆上分配的每個物件都有一些額外成員,這些成員必須初始化。

3.物件中的其他位元組(為字段而設)總是設為0

4.從託管堆分配物件時,可能強制執行一次垃圾**

引用型別和值型別的區別:

任何稱為「類」的型別都是引用型別。(如:system.exception類,system.io.filestream類以及system.radom類)

所有值型別都稱為結構或者列舉,(如:system.int32結構,systemboolean結構,systemdecimal結構,system.timespan結構,system.dayofweek列舉,system.io.fileattributes列舉以及system.drawing.fontstyle列舉)所有結構都是抽象型別system.valuetype的直接派生類。system.valuetype本身又直接從system.object派生。根據定義,所有值型別都必須從system.valuetype派生。所有列舉都是從system.enum抽象型別派生,後者又從system.valuetype派生。

class someref //

所有的class都是引用型別

struct someval //

所有的struct都是值型別

static

void

valuetypedemo()

將值型別變數賦給另乙個值型別變數,會逐行逐字段的複製,將引用型別的變數賦給另乙個引用型別的變數只複製記憶體位址。

裝箱是將值型別轉換成引用型別,拆箱是將引用型別轉換成值型別

public

static

void

main()

要獲取對值型別例項的引用,例項就必須裝箱,將值型別例項傳給需要獲取引用型別的方法,就會發生這種情況

public

sealed

class

program ,,

", v, v, v);

#else

//下面**結果一樣,但無論執行速度,還是記憶體利用,都比前面**更勝一籌

object o = v; //

對v進行手動裝箱(1次)

//編譯下面這行不發生裝箱

console.writeline(",,"

, o, o, o);

}}

python第五章 Python學習(第五章)

記錄所有的名片字典 card list defshow menu 顯示資訊 print 50 print 歡迎使用 名片管理系統 v1.0 print print 1.新增名片 print 2.顯示全部 print 3.搜尋名片 print print 0.退出系統 print 50 defnew ...

記錄 Head first java 第五章

一開始很害怕第五章。現在自己碼一遍 覺得其實也沒什麼,短短60行 而已,心裡很輕鬆。不過教會了我一些東西。遇到真實的問題 首先把問題梳理清楚,最好能畫出流程圖 然後設計類 設計哪些類,類裡面有什麼變數,什麼函式,這個是需要經驗的。多總結 然後實現類的時候 其實就是實現裡面的方法,注意,一定要寫好偽碼...

CLR via C 第五章 程式語言的基元型別

基元型別的概念 編譯器直接支援的資料型別稱為基元型別。基元型別會直接對映到frameeork類庫中存在的型別。像這樣的沒有繼承關係的fcl型別之間的相互轉換。按理說是不能通過的 根據第四章型別物件的知識 但是這樣編寫實際上是不會出錯的。原因是編譯器非常熟悉基元型別,並在編譯 時應用他自己的特殊規則。...