CLR(Common Language Runtime)公共語言運行時:是一個可由多種編程語言使用的「運行時」。編程
編譯源代碼文件的過程:服務器
- C# 源代碼文件 -》 C# 編譯器-》託管模塊(中間語言和元數據)
- Basic 源代碼文件 -》 Basic 編譯器-》託管模塊(中間語言和元數據)
託管模塊的各個組成部分:編程語言
- PE32 或PE32+頭
- CLR頭
- 元數據 - 是一組數據表,其中一些數據表描述了模塊中定義的內容,好比類型及成員。還有一些數據表描述了託管模塊引用的內容,好比導入的類型及其成員。
- IL(中間語言)代碼
判斷是否已安裝.NET Framework, 只許判斷C:\Windows\System32目錄中是否存在文件mscoree.dll。 一臺及其可能同時安裝好幾個版本的.NET Framework, 須要到註冊表中查看:函數
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup
通用類型系統(Common Type System)CTS規定,一個類型能夠包含零個或者多個成員:對象
- 字段(Field)—— 一個數據變量,是對象狀態的一部分。字段根據名稱和類型來區分
- 方法(Method)—— 一個函數,能針對對象執行一個操做,一般會改變對象的狀態。方法有一個名稱、一個簽名以及一個或多個修飾符。
- 屬性(Property)—— 對於調用者,該成員看起來像一個字段。但對於類型的實現者,它看起來像是一個方法(或者兩個方法,稱爲getter 和setter)。
- 事件(Event)—— 事件在對象以及其餘相關對象之間實現了一個通知機制。例如,利用按鈕提供的一個事件,能夠再按鈕被單擊以後通知其餘對象。
CTS 還指定了類型可視性規則以及類型成員的訪問規則:繼承
- private: 成員只能由同一個類(class)類型中的其餘成員訪問
- family:成員可由派生類型訪問,無論那些類型是否在同一個程序集
- family and assembly:成員可由派生類型訪問,但這些派生類型必須是在同一個程序集中定義的
- assembly:成員可由同一個程序集中的任何代碼訪問
- family or assembly:成員可由任何程序集中的派生類型訪問
- public: 成員可由任何程序集中的任何代碼訪問
除此以外,CTS還爲類型繼承、虛方法、對象生存期等定義了規則。事件
CTS規定:全部類型最終必須從預約義的System.Object類型繼承。System.Object類型容許作下面這些事情:字符串
- 比較兩個實例的相等性
- 獲取實例的哈希碼
- 查詢一個實例的真正類型
- 執行實例的淺(按位)拷貝
- 獲取實例對象的當前狀態的一個字符串表示
於非託管代碼的互操做性 - CLR 支持三種互操做情形:get
- 託管代碼能調用DLL中的非託管函數
- 託管代碼可以使用現有的CMO組件(服務器)
- 非託管代碼可以使用託管類型(服務器)