主要內容包括:算法
C#與.NET的關係、公共語言運行庫、中間語言、程序集、.NET Framework類、名稱空間、內層管理...數據庫
C#是門高級編程語言,.NET(Framework)是個環境,用C#編寫的全部代碼老是在.NET Framework中運行。編程
它是.NET Framework的核心,在CLR控制下運行的代碼稱爲託管代碼。CLR執行編寫好的源代碼以前,須要編譯它。windows
編譯分兩個階段:設計模式
1)將源代碼編譯爲Microsoft中間語言(IL)安全
2)CLR把IL編譯爲平臺專用代碼。網絡
這種設計的重要優勢:編程語言
1)平臺無關性,依託的是:CTS是通用類型系統,CLS是通用語言規範,函數
2)提升性能性能
3)語言的互操做性,COM、windows運行庫
中間語言
應用程序域
就是爲安全性,可靠性,隔離性,和版本控制,及卸載程序提供的隔離邊界。它一般由運行庫宿主建立,應用程序域提供了一個更安全,用途更廣的處理單元。
程序集是.NET時代的動態連接庫DLL,程序集是包含編譯好的、面向.NET Framework的代碼的邏輯單元。
程序集包括(中間語言(IL),元數據(metaData),資源(resource),裝配清單(AL))。
它包含的元數據(描述自身的數據)描述了對應代碼中定義的類型和方法。
能夠編程訪問這些元數據,這個技術稱爲「反射」。抽象工廠設計模式中有用到:
static string AssemblyName = Assembly.GetExecutingAssembly().GetName().Name; //獲取程序集名稱 string className = AssemblyName+".Models" + "." + db + "User"; //命名空間.類名稱 (IUser)Assembly.Load(AssemblyName).CreateInstance(className); //獲取IUser程序集
可執行代碼和庫代碼,使用相同的程序集結構,他們的區別是:
可執行代碼的程序集包含一個主程序的入口點,而庫程序集不包含。
屬於託管類,使用託管代碼的好處是可使用.NET基類庫,很是多的類的集合。大部分.net基類庫是用C#寫的。
是.NET避免類名衝突的一種方式。
Microsoft建議都至少要提供兩個嵌套的命名空間名,第一個是公司名,第二個是技術名稱或者軟件包的名稱,再以後是類名。
一、GC(Garbage collector)
GC是垃圾收集器。CLR經過GC實現的自動內存管理。
1)什麼被認爲是可回收的對象?
GC採用必定的算法遍歷全部的對象,找出可達對象和不可達對象,不可達對象是可回收的對象。
2)何時回收?
一般狀況下:內存不足溢出時,確切的說,是第一代對象已滿的時候。
3)如何回收?
垃圾收集進程來釋放不可達對象的內存空間。
4)回收完後,還須要作什麼?
避免託管堆上的內存碎片,從新分配內存,壓縮託管堆。
5)避免垃圾回收帶來的性能影響,採用代齡機制。
如要請求垃圾收集,能夠調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
二、託管資源vs非託管資源
資源就是程序中可利用的數據,譬如:字符串、圖片和任何二進制數據,包括任何類型的文件。
託管資源是由CLR全權負責的資源,CLR不負責的資源位非託管資源。
對於託管資源經過GC自動清理回收。對於非託管資源,經過代碼調用手動進行清除,再由GC回收。
如何正確的釋放資源:對於非託管的資源,通常就是,Stream(流),數據庫的鏈接,網絡鏈接等的這些操做系統資源,須要咱們手動去釋放。
Net提供了三種釋放方法:Dispose,Close,析構函數(也就是Finalize方法)