一、.net和C#是什麼關係 .net是一個程式運行的平臺,它是c#,vb,F#等程式運行的平臺,為這些語言提供基礎類庫、公共語言運行時(CLR)等相關支持。 C#是支持.net的一種編程語言。.net編程語言有很多種,常用的是C#,還有Visual Basic、C++/CLI、Eiffel、F#、 ...
一、.net和C#是什麼關係
.net是一個程式運行的平臺,它是c#,vb,F#等程式運行的平臺,為這些語言提供基礎類庫、公共語言運行時(CLR)等相關支持。
C#是支持.net的一種編程語言。.net編程語言有很多種,常用的是C#,還有Visual Basic、C++/CLI、Eiffel、F#、IronPython等很多種。
visual studio是開發工具,支持這些編程語言開發相應的.net程式。
二、編譯與執行
編譯是把編程語言編寫的源代碼轉成CIL(中間語言)並生成程式集的過程。執行是程式執行時CLR(公共語言運行時)捕獲CIL後,激活JIT編譯器,將CIL編譯成機器語言的過程。上一張抄來的圖(https://blog.csdn.net/lidandan2016/article/details/77868043):
三、名詞解釋
各種縮寫,名詞太多了,一直弄混,找一些經常看見的記錄下。
1、CLR(Common Language Runtime,公共語言運行庫):CLR是一個運行時環境,功能主要包括記憶體管理,程式集載入,異常管理,系統資源回收等。
2、托管代碼:由CLR管理運行的代碼。
3、非托管代碼:與CLR無關的代碼。
4、GC(Garbage Collector,垃圾收集器):GC只能回收托管資源(由CLR管理的存在於托管堆上的稱為托管資源)。GC的運行不需要人工干預,CLR會在需要的時候調用GC進行垃圾回收。GC遍歷托管堆上的對象,將不能回收的對象做上標記,最後沒有標記的對象作為垃圾釋放掉,釋放後不連續的記憶體空間會壓縮成連續的記憶體空間。
5、CIL(Common Intermediate Lauguage,公共中間語言):與IL,MSIL(微軟中間語言)是一個概念,源代碼在編譯過程中被翻譯成的一系列指令集。CIL是底層平臺無關的,CLR使用不同CPU的即時編譯器編譯CIL為相應的機器代碼。
6、元數據:描述數據的數據。描述了文件中定義的類型以及每個類型的成員,比如某個欄位的訪問許可權、欄位擁有者等信息。
7、程式集清單:本身也是一種元數據,描述程式集自身。記錄了關聯的外部程式集、程式集版本、版權信息等。發佈的程式運行提示哪個dll版本不匹配就是路徑下的dll文件版本與清單中記錄的版本不一致。
8、程式集:由編譯成生成的dll、exe文件。包含CIL、元數據、清單的一種集合,是可以被CLR載入並運行的一堆數據集。(VS里創建的一個新項目,比如一個類庫,編譯後就被打包成與類庫名稱相同的一個dll,這就是一個程式集)。
9、CTS(Common Type System,通用類型系統):一個正式的規範,規定了類型必須如何定義才能被CLR載入。主要是類、結構、枚舉、委托、介面五中類型。system.Int32、system.Object等是內建的CTS數據類型。平時用的int ,string這些關鍵字是這些類型的一種代號。
10:CLS:一套規則,每種編程語言都有各自的語法,不同的語言功能,CLS就是一種能在各種語法中通用的一種準則。按照這個準則生成的程式集可以在其他語言中調用。
個人理解,後續慢慢補充完善。