CLS/CLR、c#(等语言)、托管、元数据、程序集 CLR学习第二课
一、名稱解釋:
CLS:common language specilication:通用語言規范;
CLR:common language Runtime 公共語言運行時。
托管代碼:編譯的代碼直接clr等一層一層的進行 代碼編譯(C#--C#編譯器--CLR(把它編譯為IL)--IL--本地cpu可執行代碼)并進行類型安全驗證、資源釋放等操作。
非托管代碼:c#語言生成的代碼直接由cpu執行,所以需要自己處理資源釋放、類型安全檢查、等一系列的操作。
元數據:包含程序運行所需的一切資源信息,元數據中包含3個表:定義表(Def)、引用表(Ref)、清單表。
其中定義表、引用表:中分別包含了 模塊(ModuleRef、MouduleDef)、類型(type)、方法(Method)、字段(Filed)、參數(Param)、屬性、事件的引用表和定義表(都是在他們后面加Def或者ref)。
清單表:一組元數據的集合,包含程序集中一部分文件名稱、還描述了程序集的版本、語言、發布者、共有打出類型、以及程序所需的所有文件;
清單元數據:AssemblyDef、FileDef、MainfestResourceDef(包含程序集的所以資源條目,和一個該資源在資源文件或者流在FileDef表中的索引,如果該資源不是單獨文件則把它嵌入到PE文件中)、ExportTypesDef(程序集中所有的PE模塊導出的每一個共有類型都在其中;還包括了類型名稱,一個FileDef表中的引用,和一個TypeDef表的索引,清單PE文件中的類型不會在該表中)。清單為程序使用者和其各個部分直接提供了一個層接關系,實現程序集自描述。程序集清單知道該清單所包含的文件是一個程序集的,但是其他程序集卻不知道他們是一個程序集。
codeBase:在配置文件中定義;保存應用程序需要下載的程序集文件,其中包含得有需要下載程序集的url。當程序加載一個程序集時,CLR首先獲得codebase元素的地址,然后在本地機器下緩存中看是否存在該文件,如果存在則加載,不存在拋出FileNotFoundException異常。
程序集(exe、dll):定義了可重用的類型、版本號、安全相關的信息。
二、vs支持很多語言,所有的語言經過自己的編譯器處理,clr處理,最后生成IL代碼。也就是說所有的語言建立在同一個基礎上的,所有可以實現不同語言生成的dll、或者exe文件之間公用,也方便了代碼的反編譯。但是公用exe或者dll文件的標準是他們必須遵循CLS規則。如vb中不區分大小寫、c#中區分、c++中不支持無符號類型等。所有在寫能讓其他語言調用的代碼時必須遵循cls規則,統一原則。才可以相互調用,可以給代碼設置屬性,讓其檢查當前語言編寫規范是否符合cls規則(方法在類上方聲明屬性:assembly:[CLSCompliant(true))] 編譯器就會自動檢查上方cls兼容。
轉載于:https://www.cnblogs.com/gowhy/archive/2011/04/01/2001949.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的CLS/CLR、c#(等语言)、托管、元数据、程序集 CLR学习第二课的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 仙居(一)
- 下一篇: sql语句查询结果合并union 和un