C#基礎(chǔ)知識整理:.Net知識(一)

原文:https://blog.csdn.net/yysyangyangyangshan/article/details/7486693
1、什么是.NET Framework 所謂.NET FrameWork就是一個平臺,它的目的是為了跨操作系統(tǒng)編程。它包含了很多模塊,例如有windows應(yīng)用程序構(gòu)件,Web開發(fā)的模塊等,而不同的操作系統(tǒng)根據(jù)自己的特性,支持其中部分模塊。NET框架是采用虛擬機(jī)運(yùn)行的編程平臺,以通用語言運(yùn)行時(Common Language Runtime)為基礎(chǔ),支持多種語言(C#、VB.NET、C++等)的開發(fā)??砷_發(fā)桌面應(yīng)用程序(WinForm、WPF、SilverLight、Office)、Web應(yīng)用程序(Asp.NET、ASP.NET MVC、SilverLight)、Windows Service、及移動嵌入式開發(fā)。目前常用的版本是:2.0、3.0、3.5、4.0;
2、.NET中的幾個概念
(1)、CLR概念?
詳細(xì):CLR是公共語言運(yùn)行時,(Common Language Runtime)和Java虛擬機(jī)一樣也是一個運(yùn)行時環(huán)境,它負(fù)責(zé)資源管理(內(nèi)存分配和垃圾收集),并保證應(yīng)用和底層操作系統(tǒng)之間必要的分離。
(2)、托管代碼的優(yōu)點(diǎn)? 詳細(xì):http://blog.csdn.net/yysyangyangyangshan/article/details/7467111
(3)、語言互操作性的真正含義和表現(xiàn)形式? 詳細(xì):用一種語言編寫的類應(yīng)能繼承用另一種語言編寫的類
一個類能包含另一個類的實(shí)例,而不管他們是用什么語言寫的.一個對象應(yīng)能直接調(diào)用用其
他語言編寫的對象的方法
對象(或?qū)ο笠?應(yīng)能在方法間傳遞
在不同的語言之間調(diào)用方法時,應(yīng)能在調(diào)試器中調(diào)試這些方法的調(diào)用,即調(diào)試不同語言編寫
的代碼
(4)、在.NET中,程序編譯過程? 詳細(xì):http://blog.csdn.net/yysyangyangyangshan/article/details/7306346
(5)中間語言的主要特征? 可以被不同的編譯器實(shí)時編譯并運(yùn)行在不同的結(jié)構(gòu)上,消除了語言紛爭。中間語言還是高級語言。
(6)、動態(tài)語言和靜態(tài)語言、強(qiáng)類型定義語言和弱類型定義語言的概念區(qū)分? 動態(tài)類型語言:在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語言,
靜態(tài)類型語言:數(shù)據(jù)類型是在編譯其間檢查的。
強(qiáng)類型定義語言:強(qiáng)制數(shù)據(jù)類型定義的語言。
弱類型定義語言:數(shù)據(jù)類型可以被忽略的語言。它與強(qiáng)類型定義語言相反, 一個變量可以賦不同數(shù)據(jù)類型的值。
(7)編譯型和解釋型(參考自博客園) 先看看編譯型,其實(shí)它和匯編語言是一樣的:也是有一個負(fù)責(zé)翻譯的程序來對我們的源代碼進(jìn)行轉(zhuǎn)換,生成相對應(yīng)的可執(zhí)行代碼。這個過程說得 專業(yè)一點(diǎn),就稱為編譯(Compile),而負(fù)責(zé)編譯的程序自然就稱為編譯器(Compiler)。如果我們寫的程序代碼都包含在一個源文件中,那么通常 編譯之后就會直接生成一個可執(zhí)行文件,我們就可以直接運(yùn)行了。但對于一個比較復(fù)雜的項(xiàng)目,為了方便管理,我們通常把代碼分散在各個源文件中,作為不同的模 塊來組織。這時編譯各個文件時就會生成目標(biāo)文件(Object file)而不是前面說的可執(zhí)行文件。一般一個源文件的編譯都會對應(yīng)一個目標(biāo)文件。這些目標(biāo)文件里的內(nèi)容基本上已經(jīng)是可執(zhí)行代碼了,但由于只是整個項(xiàng)目的 一部分,所以我們還不能直接運(yùn)行。待所有的源文件的編譯都大功告成,我們就可以最后把這些半成品的目標(biāo)文件“打包”成一個可執(zhí)行文件了,這個工作由另一個 程序負(fù)責(zé)完成,由于此過程好像是把包含可執(zhí)行代碼的目標(biāo)文件連接裝配起來,所以又稱為鏈接(Link),而負(fù)責(zé)鏈接的程序就叫……就叫鏈接程序 (Linker)。鏈接程序除了鏈接目標(biāo)文件外,可能還有各種資源,像圖標(biāo)文件、聲音文件等,還要負(fù)責(zé)去除目標(biāo)文件之間的冗余重復(fù)代碼。鏈接完成之后,一般就可以得到我們想要的可執(zhí)行文件了。
再看看解釋型。 “編譯”和“解釋”的確都有“翻譯”的意思,它們的區(qū)別則在于翻譯的時機(jī)安排不大一樣。打個比方:假如你打算閱讀一本外文書,而你不知道 這門外語,那么你可以找一名翻譯,給他足夠的時間讓他從頭到尾把整本書翻譯好,然后把書的母語版交給你閱讀;或者,你也立刻讓這名翻譯輔助你閱讀,讓他一 句一句給你翻譯,如果你想往回看某個章節(jié),他也得重新給你翻譯。
兩種方式,前者就相當(dāng)于我們剛才所說的編譯型:一次把所有的代碼轉(zhuǎn)換成 機(jī)器語言,然后寫成可執(zhí)行文件;而后者就相當(dāng)于我們要說的解釋型:在程序運(yùn)行的前一刻,還只有源程序而沒有可執(zhí)行程序;而程序每執(zhí)行到源程序的某一條指 令,則會有一個稱之為解釋程序的外殼程序?qū)⒃创a轉(zhuǎn)換成二進(jìn)制代碼以供執(zhí)行,總言之,就是不斷地解釋、執(zhí)行、解釋、執(zhí)行……所以,解釋型程序是離不開解釋 程序的。像早期的BASIC就是一門經(jīng)典的解釋型語言,要執(zhí)行BASIC程序,就得進(jìn)入BASIC環(huán)境,然后才能加載程序源文件、運(yùn)行。解釋型程序中,由 于程序總是以源代碼的形式出現(xiàn),因此只要有相應(yīng)的解釋器,移植幾乎不成問題。編譯型程序雖然源代碼也可以移植,但前提是必須針對不同的系統(tǒng)分別進(jìn)行編譯, 對于復(fù)雜的工程來說,的確是一件不小的時間消耗,況且很可能一些細(xì)節(jié)的地方還是要修改源代碼。而且,解釋型程序省卻了編譯的步驟,修改調(diào)試也非常方便,編 輯完畢之后即可立即運(yùn)行,不必像編譯型程序一樣每次進(jìn)行小小改動都要耐心等待漫長的Compiling…Linking…這樣的編譯鏈接過程。不過凡事有 利有弊,由于解釋型程序是將編譯的過程放到執(zhí)行過程中,這就決定了解釋型程序注定要比編譯型慢上一大截,像幾百倍的速度差距也是不足為奇的。
編譯型與解釋型,兩者各有利弊。前者由于程序執(zhí)行速度快,同等條件下對系統(tǒng)要求較低,因此像開發(fā)操作系統(tǒng)、大型應(yīng)用程序、數(shù)據(jù)庫系統(tǒng)等時都采用它,像 C/C++、Pascal/Object Pascal(Delphi)、VB等基本都可視為編譯語言,而一些網(wǎng)頁腳本、服務(wù)器腳本及輔助開發(fā)接口這樣的對速度要求不高、對不同系統(tǒng)平臺間的兼容性 有一定要求的程序則通常使用解釋性語言,如Java、JavaScript、VBScript、Perl、Python等等。
但既然編 譯型與解釋型各有優(yōu)缺點(diǎn)又相互對立,所以一批新興的語言都有把兩者折衷起來的趨勢,例如Java語言雖然比較接近解釋型語言的特征,但在執(zhí)行之前已經(jīng)預(yù)先 進(jìn)行一次預(yù)編譯,生成的代碼是介于機(jī)器碼和Java源代碼之間的中介代碼,運(yùn)行的時候則由JVM(Java的虛擬機(jī)平臺,可視為解釋器)解釋執(zhí)行。它既保 留了源代碼的高抽象、可移植的特點(diǎn),又已經(jīng)完成了對源代碼的大部分預(yù)編譯工作,所以執(zhí)行起來比“純解釋型”程序要快許多。而像VB6(或者以前版本)、 C#這樣的語言,雖然表面上看生成的是.exe可執(zhí)行程序文件,但VB6編譯之后實(shí)際生成的也是一種中介碼,只不過編譯器在前面安插了一段自動調(diào)用某個外 部解釋器的代碼(該解釋程序獨(dú)立于用戶編寫的程序,存放于系統(tǒng)的某個DLL文件中,所有以VB6編譯生成的可執(zhí)行程序都要用到它),以解釋執(zhí)行實(shí)際的程序 體。C#(以及其它.net的語言編譯器)則是生成.net目標(biāo)代碼,實(shí)際執(zhí)行時則由.net解釋系統(tǒng)(就像JVM一樣,也是一個虛擬機(jī)平臺)進(jìn)行執(zhí)行。 當(dāng)然.net目標(biāo)代碼已經(jīng)相當(dāng)“低級”,比較接近機(jī)器語言了,所以仍將其視為編譯語言,而且其可移植程度也沒有Java號稱的這么強(qiáng)大,Java號稱是 “一次編譯,到處執(zhí)行”,而.net則是“一次編碼,到處編譯”。總之,隨著設(shè)計(jì)技術(shù)與硬件的不斷發(fā)展,編譯型與解釋型兩種 方式的界限正在不斷變得模糊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本節(jié)內(nèi)容 Python介紹 發(fā)展史 Python 2 or 3? 安裝 Hello World程序 變量 用戶輸入...
    小小不懂11閱讀 3,542評論 2 30
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,138評論 25 708
  • 我等待的八月如火一般寧靜在炙烤的心沒有半點(diǎn)過熟的堅(jiān)硬依舊熱氣騰騰這豐富美麗奔流不息的世界我是幸運(yùn)的螻蟻生于斯死于斯...
    七株茅草閱讀 116評論 0 0
  • A1.我是自由職業(yè)者,沒有固定的時間安排,有生意就接沒有生意就在家里,所以我的時間是沒有特定的!現(xiàn)在想想近一周的時...
    小妖啊嘟閱讀 245評論 0 0
  • 01 時間管理訓(xùn)練營里有位很優(yōu)秀的女生?。?,去年就職某跨國咨詢公司。她大三設(shè)立目標(biāo)每天背誦單詞,現(xiàn)在苦惱于詞匯量巨...
    615806fad85f閱讀 5,621評論 7 260

友情鏈接更多精彩內(nèi)容