正在學習C#,總結一下第一章簡介內容,和大家分享一下,有錯請指出。
(1)C#和.NET Framework必須一起考慮。C#的所有代碼總是在.NET Framework中運行,說明,許多情況下,C#的特定語言功能取決於.NET的功能,或依賴於.NET基類。
1.C#與.NET 的關係
C#是一種基於面向對象的語言,其本身只是一種語言。而.NET Framework是一個功能豐富的平臺,用於開發、部署和執行分佈式應用程序。C#並不是.NET的一部分,它們之間的一些各自的特性另一個並不支持。但,兩者一起使用,其開發程序的效率很高。
2.公共語言運行庫
(1) .NET Framework的核心是其運行庫執行環境,稱爲公共語言運行庫(CLR)或者.NET運行庫。在CLR控制下運行的代碼稱爲託管代碼。
(2)在.NET中,編譯分爲兩個階段:1是源代碼-->Microsoft中間語言(IL);2是CLR把IL編譯爲平臺專用代碼。
(3)IL(中間語言)也Java字節碼共享一種理念:都是低級語言,語法很簡單(數字代碼),可以快速地轉換爲本地機器碼。其優點:平臺無關性、提高性能和語言的互操作性。
2.1 平臺無關性
中間語言(IL)的平臺無關性,意味着字節碼指令可以放在任一平臺。(與Java字節碼平臺無關性類似)
2.2 提高性能
(1)IL總是即時編譯的(稱爲JIT編譯)。所謂JIT編譯,即只編譯它調用的那部分代碼,並不是把整個程序一次編譯完。代碼編譯一次後,得到本地可執行程序存儲起來,直到退出該應用程序,這樣,下次運行時該部分代碼時,就不需要重新編譯了。
(2)託管IL代碼和本地機器代碼的執行速度一樣快。其原因是編譯過程的最後一部分是在運行時進行的,JIT確切知道程序運行在什麼類型的處理器上。
2.3 語言的互操作性
就是能將任何一種語言編譯爲中間語言,編譯爲中間語言的代碼可以與從其他語言編譯過來的代碼進行交互操作。
2.3.1 Visual Basic2010
2.3.2 Visual C++
2.3.3 COM和COM+
3.中間語言
3.1 面向對象和接口的支持
(1)Microsoft爲IL選擇的特定道路是傳統的面向對象的編程,帶有類的單一繼承性。
(2)引入接口概念,實現給定接口的類必須提供該接口指定的方法和屬性的實現方式。不過,.NET建立的接口並不支持任何COM基礎結構,也不是派生自IUnknown,也沒有對應的GUID。
(3)COM(Component Object Model,組件對象模型),並不是面向.NET的技術,不能編譯爲IL,但託管代碼可以調用COM組件,COM也可以調用託管代碼。COM允許以不同語言編寫的組件一起工作,調用彼此方法,不過,每個對象都必須通過COM運行庫來實例化。
(4)語言的互操作性的真正含義是用一種語言編寫的類應能直接與另一種語言編寫的類通信。
3.2 不同的值類型和引用類型
(1)值類型:變量直接存儲數據。一般存儲在堆棧中。
(2)引用類型:變量僅存儲地址,數據可以在該地址中找到。存儲在一個名爲:託管堆的內存區域中。
3.3 強數據類型化:將數據類型強制轉換。
(1)所有的變量都清晰地標記爲屬於特定數據類型,中間語言一般不允許對模糊數據類型執行任何操作。
(2)會降低安全性,但是也有一些好處:語言的互操作性、垃圾收集、安全性、應用程序域。
3.3.1 語言互操作性中強數據類型化的重要性:如果類派生自其它類或包含其它類的實例,它就需要知道其它類使用的所有數據類型。
(1)通用類型系統(CTS):CTS定義了可以在中間語言中使用的預定義數據類型,所有面向.NET Framework的語言都可以生成最終基於這些類型的編譯代碼。CTS還定義了一個內容豐富的類型層次結構。
(2)公共語言規範(CLS):和通用類型系統(CTS)一起確保語言的互操作性。CLS是一個最低標準集,所有面向.NET的編譯器都必須支持它。
3.3.2 垃圾回收
(1)垃圾回收器(garbage collector)用來在.NET中進行內存管理,特別是它可以恢復正在運行的應用程序需要的內存。
(2)目前,使用兩種技術來釋放進程向系統動態請求的內存:1、完全以手工方式使應用程序代碼完成這些工作;2、讓對象維護引用計數。
(3)維護引用計數是COM對象採用的技術。用於釋放相關內存和資源。
(4).NET運行庫採用的是垃圾回收器
3.3.3 安全性:提供了基於代碼的安全性。
3.3.4 應用程序域(application domain):是分離組件的一種方式,用於減少運行應用程序的開銷。
3.4 通過異常處理錯誤:try{}catch{}finally{}
3.5 特性的使用:最初是爲了再程序中提供與某些項相關的額外信息,以供編譯器使用。
4. 程序集:是包含編譯好的、面向.NET Framework的代碼的邏輯單元。
(1)是完全自描述性的,是一個邏輯單元。
注意:可執行代碼和庫代碼使用相同的程序集結構,區別是可執行程序集包含一個主程序入口點,而庫程序集不包含。
(2)包含的元數據描述了對應代碼中定義的類型和方法。程序集包含程序的元數據,表示調用給定程序集中的代碼的應用程序或其他程序集不需要引用注
冊表或其他數據源,就能確定如何使用該程序集。
(3)程序集有兩種類型:私有程序集和共享程序集。
4.1 私有程序集:私有程序集是最簡單的一種程序集類型。一般附帶在某個軟件商,且只能用於該軟件。安全性較高
4.2 共享程序集:其他應用程序可以使用的公共庫。
(1)風險:名稱衝突;程序集被同一個程序集的不同版本覆蓋。
(2)措施:把共享程序集放在文件系統的一個特定的子目錄樹中,稱爲全局程序集緩存(GAC)。
(3)爲了避免名稱衝突,應根據私鑰加密法爲共享程序集指定一個名稱(而對於私有程序集,只需要指定與其主文件名相同的名稱即)。該名稱稱爲強名(strong name),並保證其唯一性,它必須由要引用共享程序集的應用程序來引用。
(4)與覆蓋程序集的風險相關的問題,可以通過在程序集清單中指定版本信息來解決,也可以通過同時安裝來解決。
4.3 反射:通過編程訪問程序集中存儲的元數據(包括在程序集中定義的所有類型和這些類型的成員的細節)的技術。
4.4 並行編程:新的並行編程功能提供了一個新的Task Parallel Library和PLINQ Execution Engine。
5. .NET Framework類:.NET基類是一個內容豐富的託管代碼類集合。它的一個主要優點是非常直觀和易用。
6. 名稱空間:是.NET避免類名衝突的一種方式。
7. 用C#創建.NET應用程序
(1)創建ASP.NET應用程序:主要目標是使用最少的代碼建立強大、安全、動態的應用程序.
(2) 創建Windows窗體
(3) 使用WPF
(4) Windows控件
(5) Windows 服務
(6) WCF
(7) Windows WF
小結:
1.C#和.NET的關係
(1).NET是一個平臺,包括.NET Framework框架,提供了一個穩定的環境來保證我們基於.NET平臺開發的各種應用的正常運行。.NET Framework框架中包括CLR(公共語言運行時)和.NET 類庫。
(2)C#是一種語言。
2. .NET能開發Winfrom、ASP.NET、wp8、unity3D.
3.2種交互模式:C/S B/S
4.兩行代碼:
Console.WriteLine("");
Console.Write("");
Console.ReadKey();
Console.ReadLine();