天天看點

【每天進步一點點】 .net概念

.net編譯之後的程式集有二種存在形式:分别為.exe與.dll

一、Basic Class Library BCL基礎類庫

mscorlib.dll

二、架構類庫 FCL

BCL是FCL的一個子集

三、CTS公共類型系統

四、即時編譯 Just-In-time compilation

靜态編譯:在程式執行前全部被翻譯為機器碼;反之動态編譯是一句句執行翻譯,邊運作變翻譯

值類型與引用類型

(1)繼承、均內建自System.Object類,不同之處,幾乎所有的引用類型都是直接從System.Object直接繼承,值類型則從System.Object的子類System.ValueType繼承。

(2)記憶體配置設定 引用類型擋在托管堆上,托管棧将引用托管堆;值類型在運作時(托管棧)配置設定

引用類型如:string,Object,class等總是在從托管堆上配置設定的,C#中new操作符傳回對象的記憶體位址–也就是指向對象資料的記憶體位址。

拆箱與裝箱就是值類型與引用類型的轉換,其是值類型和引用類型之間的橋梁。之是以可以這樣轉換是因為C#所有類型都源自Object(所有值類型都源于ValueType,而ValueType源于Object)。

注意字元串在修改時,是在堆上建立一個新的對象,然後将棧上的字元串指向新的對象(舊的對象變為垃圾等待GC回收)。字元串的值是無法被修改的(具有不變性)。考慮使用StringBuilder來防止建立過多對象,減輕GC壓力。

字元串的不變性指的是字元串一經指派,其值就不能被更改。當使用代碼将字元串變量等于一個新的值時,堆上會出現一個新的字元串,然後棧上的變量指向該新字元串。沒有任何辦法更改原來字元串的值。

字元串駐留是CLR的JIT做代碼優化時,CLR會維護一個字元串駐留池(内部哈希表),并在建立字元串時,探查是否已經有相同值的字元串存在。隻有以下兩種情況才會自動探查。

繼續閱讀