《C#圖解教程》讀書心得之C#語言
這本書講解C#語言十分詳細,我將其中的重要內(nèi)容整理成條款,以備忘。
1..NET 由三部分組成:CLR ,編碼工具和 BCL 。CLR 負責內(nèi)存管理、代碼安全驗證、代碼執(zhí)行、垃圾收集。.NET 提供平臺調(diào)用( P/Invoke ), 允許調(diào)用 Windows API ,而且還可以和 COM 進行交互操作。
2. .NET 開發(fā)人員可以不必了解 COM 的知識,無需考慮諸如 IUnknown 接口,類型庫,引用計數(shù),注冊表以及 HRESULT(COM 使用 HRESULT) 數(shù)據(jù)類型返回運行時錯誤代碼,而 .NET 不使用 HRESULT ,因為所有的運行時錯誤都會產(chǎn)生異常。
3. .NET 語言的編譯器接受源代碼文件,輸出文件為程序集。程序集中的代碼并不是本地代碼,而是CIL 。程序集中包含CIL ,程序集中使用的類型的元數(shù)據(jù)以及對其他程序集引用的元數(shù)據(jù)。
4. CLR 在運行時首先檢查程序集的安全特性,然后在內(nèi)存中分配空間,再把程序集中被調(diào)用到的 代碼送進 JIT 。程序集中的 CIL 只有在被調(diào)用到時才會被 JIT 編譯成本地代碼,然后就被緩存起來以備在后來的程序中執(zhí)行,即不被調(diào)用的代碼不會被編譯成本地代碼,而且被調(diào)用到的代碼只被編譯一次。一旦CIL 被編譯成本地代碼,CLR 就會在運行時進行管理,如:釋放內(nèi)存、檢查數(shù)組邊界、檢查參數(shù)類型、管理異常等。
5.運行在CLR ,并且在運行時受CLR 控制的代碼叫做托管代碼,反之為非托管代碼。
6. CLI( 公共語言基礎(chǔ)結(jié)構(gòu) ) 是一組闡述了系統(tǒng)的架構(gòu)、規(guī)則和約定的規(guī)范。包含 CTS: 定義了一組豐富的內(nèi)置類型,定義了每種類型確定的詳細的特性 , 而且所有支持 .NET 的語言提供的類型通常會映射到 CTS 中已定義的內(nèi)置類型集的某一個特殊子集;CLS :詳細說明了支持 .NET 語言的規(guī)則、屬性和行為,其主題包括數(shù)據(jù)類型、類結(jié)構(gòu)和參數(shù)傳遞。
7. 任何以 .NET 平臺作為目標的語言必須建立它的數(shù)據(jù)類型與CTS 的類型間的映射。所有 .NET 語言共享這一類型系統(tǒng),實現(xiàn)他們之間無縫的互操作,這個方案提供了語言之間的繼承性。
8. 由于CLS 是CTS 的子集 , 這意味著一種語言特征可能符合CTS 標準,但卻超過了CLS 的規(guī)范,如:C#語言支持無符號數(shù)字類型,該特征能通過 CTS 測試,但 CLS 卻僅僅識別有符號數(shù)字類型。因此,如果用戶在一個組件類使用 C# 的無符號類型,就可能無法與不支持無符號類型的語言(如 VB.NET )設(shè)計的組件實現(xiàn)互操作,但并非不可能,實際上,用戶能夠安全實現(xiàn)含有 private 成員的組件,CLS 兼容性問題。但如果用戶需要 .NET 語言的互操作性,那么用戶的組件中的 public 成員必須完全符合 CLS 規(guī)范。
9. @ 字符只能放在標識符的首位,標識符的命名風格有兩種:Pascal 風格,如:CarDeck ,建議用于類型名和成員名;Camel 風格,如:totalCycleCount ,建議用于本地變量和方法參數(shù)。
10.兩個公共約定:字段名稱使用下劃線開頭:example 或使用 m_ 開頭: m_example 。
11. 在C#語言中,可以使用任意的占位符和任意數(shù)量的值,值可以以任何順序使用,值可以在格式字符串中替換任意次。例如: Console.WriteLine(”Three integers are {1}, {0}, {1}.”, 3, 6); 輸出為 Three integers are 6, 3,6.
12. 占位符不能引用值列表以外位置的值,如果這樣做了,不會產(chǎn)生編譯錯誤,但會產(chǎn)生運行時錯誤 ( 異常 ) 。
【編輯推薦】