標籤:comm 程式集 silver mpi 垃圾收集 java語言 部落格 .net 另一個
1、什麼是.NET Framework
所謂.NET FrameWork就是一個平台,它的目的是為了跨作業系統編程。它包含了很多模組,例如有windows應用程式構件,Web開發的模組等,而不同的作業系統根據自己的特性,支援其中部分模組。NET架構是採用虛擬機器啟動並執行編程平台,以通用語言運行時(Common Language Runtime)為基礎,支援多種語言(C#、VB.NET、C++等)的開發。可開發傳統型應用程式(WinForm、WPF、SilverLight、Office)、Web應用程式(Asp.Net、ASP.NET MVC、SilverLight)、Windows Service、及移動嵌入式開發。目前常用的版本是:2.0、3.0、3.5、4.0;
2、.NET中的幾個概念
(1)、CLR概念?
詳細:CLR是通用語言執行平台,(Common Language Runtime)和Java虛擬機器一樣也是一個運行時環境,它負責資源管理(記憶體配置和垃圾收集),並保證應用和底層作業系統之間必要的分離。
(2)、Managed 程式碼的優點?
詳細:1. 平台無關性
2. 提高效能
3. 語言的互通性
(3)、語言互通性的真正含義和表現形式?
詳細:用一種語言編寫的類應能繼承用另一種語言編寫的類
一個類能包含另一個類的執行個體,而不管他們是用什麼語言寫的.一個對象應能直接調用用其
他語言編寫的對象的方法
對象(或對象引用)應能在方法間傳遞
在不同的語言之間調用方法時,應能在調試器中調試這些方法的調用,即調試不同語言編寫
的代碼
(4)、在.NET中,程式編譯過程?
詳細:1.MSIL和JIT
2.程式集
3.Managed 程式碼
4.記憶體回收
5.應用程式定義域
(5)中繼語言的主要特徵?
可以被不同的編譯器Just-In-Time 編譯並運行在不同的結構上,消除了語言紛爭。中繼語言還是進階語言。
(6)、動態語言和靜態語言、強型別定義語言和弱類型定義語言的概念區分?
動態類型語言:在運行期間才去做資料類型檢查的語言,
靜態類型語言:資料類型是在編譯其間檢查的。
強型別定義語言:強制資料類型定義的語言。
弱類型定義語言:資料類型可以被忽略的語言。它與強型別定義語言相反, 一個變數可以賦不同資料類型的值。
(7)編譯型和解釋型(參考自部落格園)
先看看編譯型,其實它和組合語言是一樣的:也是有一個負責翻譯的程式來對我們的原始碼進行轉換,產生相對應的可執行代碼。這個過程說得 專業一點,就稱為編譯(Compile),而負責編譯的程式自然就稱為編譯器(Compiler)。如果我們寫的程式碼都包含在一個源檔案中,那麼通常 編譯之後就會直接產生一個可執行檔,我們就可以直接運行了。但對於一個比較複雜的項目,為了方便管理,我們通常把代碼分散在各個源檔案中,作為不同的模 塊來組織。這時編譯各個檔案時就會產生目標檔案(Object file)而不是前面說的可執行檔。一般一個源檔案的編譯都會對應一個目標檔案。這些目標檔案裡的內容基本上已經是可執行代碼了,但由於只是整個項目的 一部分,所以我們還不能直接運行。待所有的源檔案的編譯都大功告成,我們就可以最後把這些半成品的目標檔案“打包”成一個可執行檔了,這個工作由另一個 程式負責完成,由於此過程好像是把包含可執行代碼的目標檔案串連裝配起來,所以又稱為連結(Link),而負責連結的程式就叫……就叫連結程式 (Linker)。連結程式除了連結目標檔案外,可能還有各種資源,像表徵圖檔案、音效檔等,還要負責去除目標檔案之間的冗餘重複代碼。連結完成之後,一般就可以得到我們想要的可執行檔了。
再看看解釋型。 “編譯”和“解釋”的確都有“翻譯”的意思,它們的區別則在於翻譯的時機安排不大一樣。打個比方:假如你打算閱讀一本外文書,而你不知道 這門外語,那麼你可以找一名翻譯,給他足夠的時間讓他從頭到尾把整本書翻譯好,然後把書的母語版交給你閱讀;或者,你也立刻讓這名翻譯輔助你閱讀,讓他一 句一句給你翻譯,如果你想往回看某個章節,他也得重新給你翻譯。
兩種方式,前者就相當於我們剛才所說的編譯型:一次把所有的代碼轉換成 機器語言,然後寫成可執行檔;而後者就相當於我們要說的解釋型:在程式啟動並執行前一刻,還只有來源程式而沒有可執行程式;而程式每執行到來源程式的某一條指 令,則會有一個稱之為解釋程式的外殼程式將原始碼轉換成二進位代碼以供執行,總言之,就是不斷地解釋、執行、解釋、執行……所以,解釋型程式是離不開解釋 程式的。像早期的BASIC就是一門經典的解釋型語言,要執行BASIC程式,就得進入BASIC環境,然後才能載入程式源檔案、運行。解釋型程式中,由 於程式總是以原始碼的形式出現,因此只要有相應的解譯器,移植幾乎不成問題。編譯型程式雖然原始碼也可以移植,但前提是必須針對不同的系統分別進行編譯, 對於複雜的工程來說,的確是一件不小的時間消耗,況且很可能一些細節的地方還是要修改原始碼。而且,解釋型程式省卻了編譯的步驟,修改調試也非常方便,編 輯完畢之後即可立即運行,不必像編譯型程式一樣每次進行小小改動都要耐心等待漫長的Compiling…Linking…這樣的編譯連結過程。不過凡事有 利有弊,由於解釋型程式是將編譯的過程放到執行過程中,這就決定瞭解釋型程式註定要比編譯型慢上一大截,像幾百倍的速度差距也是不足為奇的。
編譯型與解釋型,兩者各有利弊。前者由於程式執行速度快,同等條件下對系統要求較低,因此像開發作業系統、大型應用程式、資料庫系統等時都採用它,像 C/C++、Pascal/Object Pascal(Delphi)、VB等基本都可視為編譯語言,而一些網頁指令碼、伺服器指令碼及輔助開發介面這樣的對速度要求不高、對不同系統平台間的相容性 有一定要求的程式則通常使用解釋性語言,如Java、JavaScript、VBScript、Perl、Python等等。
但既然編 譯型與解釋型各有優缺點又相互對立,所以一批新興的語言都有把兩者折衷起來的趨勢,例如Java語言雖然比較接近解釋型語言的特徵,但在執行之前已經預先 進行一次先行編譯,產生的程式碼是介於機器碼和Java原始碼之間的中介代碼,啟動並執行時候則由JVM(Java的虛擬機器平台,可視為解譯器)解釋執行。它既保 留了原始碼的高抽象、可移植的特點,又已經完成了對原始碼的大部分先行編譯工作,所以執行起來比“純解釋型”程式要快許多。而像VB6(或者以前版本)、 C#這樣的語言,雖然表面上看產生的是.exe可執行程式檔案,但VB6編譯之後實際產生的也是一種中介碼,只不過編譯器在前面安插了一段自動調用某個外 部解譯器的代碼(該解釋程式獨立於使用者編寫的程式,存放於系統的某個DLL檔案中,所有以VB6編譯產生的可執行程式都要用到它),以解釋執行實際的程式 體。C#(以及其它.net的語言編譯器)則是產生.net目標代碼,實際執行時則由.net解釋系統(就像JVM一樣,也是一個虛擬機器平台)進行執行。 當然.net目標代碼已經相當“低級”,比較接近機器語言了,所以仍將其視為編譯語言,而且其可移植程度也沒有Java號稱的這麼強大,Java號稱是 “一次編譯,到處執行”,而.net則是“一次編碼,到處編譯”。總之,隨著設計技術與硬體的不斷髮展,編譯型與解釋型兩種 方式的界限正在不斷變得模糊。
C#基礎知識整理:.NET知識