CLR Via C#: CLR 的執行模型

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規定,一個類型能夠包含零個或者多個成員:對象

  1. 字段(Field)—— 一個數據變量,是對象狀態的一部分。字段根據名稱和類型來區分
  2. 方法(Method)—— 一個函數,能針對對象執行一個操做,一般會改變對象的狀態。方法有一個名稱、一個簽名以及一個或多個修飾符。
  3. 屬性(Property)—— 對於調用者,該成員看起來像一個字段。但對於類型的實現者,它看起來像是一個方法(或者兩個方法,稱爲getter 和setter)。
  4. 事件(Event)—— 事件在對象以及其餘相關對象之間實現了一個通知機制。例如,利用按鈕提供的一個事件,能夠再按鈕被單擊以後通知其餘對象。

CTS 還指定了類型可視性規則以及類型成員的訪問規則:繼承

  1. private: 成員只能由同一個類(class)類型中的其餘成員訪問
  2. family:成員可由派生類型訪問,無論那些類型是否在同一個程序集
  3. family and assembly:成員可由派生類型訪問,但這些派生類型必須是在同一個程序集中定義的
  4. assembly:成員可由同一個程序集中的任何代碼訪問
  5. family or assembly:成員可由任何程序集中的派生類型訪問
  6. public: 成員可由任何程序集中的任何代碼訪問

除此以外,CTS還爲類型繼承、虛方法、對象生存期等定義了規則。事件

CTS規定:全部類型最終必須從預約義的System.Object類型繼承。System.Object類型容許作下面這些事情:字符串

  1. 比較兩個實例的相等性
  2. 獲取實例的哈希碼
  3. 查詢一個實例的真正類型
  4. 執行實例的淺(按位)拷貝
  5. 獲取實例對象的當前狀態的一個字符串表示

 

於非託管代碼的互操做性 - CLR 支持三種互操做情形:get

  1. 託管代碼能調用DLL中的非託管函數
  2. 託管代碼可以使用現有的CMO組件(服務器)
  3. 非託管代碼可以使用託管類型(服務器)
相關文章
相關標籤/搜索