首先我們先來了解C#的發(fā)展歷程拔疚,只有知道了C#的概貌和由 來荞彼,積累了必要的背景知識,才能更好的掌握C#世杀。
C#是由微軟公司開發(fā)的一種面向?qū)ο蟛⑶疫\(yùn)行于.NetFramework 之上的高級程序設(shè)計(jì)語言。好多語法和C/C++類似肝集,并且簡單易學(xué)瞻坝。
使用C#開發(fā)應(yīng)用程序比使用其它語言更加簡單,快速杏瞻。因?yàn)镃 #是基于.NetFramework所刀。.NetFramework為開發(fā)應(yīng)用程序提供了豐富 的類庫和圖形控件,使用這些控件就可以開發(fā)出一些簡單的應(yīng)用程序捞挥。
1.1 C#發(fā)展歷程:
C#語言發(fā)布于2000年浮创,經(jīng)歷了這么多年,微軟也在不斷更新C#
的版本砌函,每次升級都會帶給我們眼前一亮斩披,具體的升級特性我們會在
以后的課程里慢慢接觸。
C#能編寫哪些應(yīng)用程序?
1:Windows桌面應(yīng)用程序;
2:Web應(yīng)用程序讹俊,也就是網(wǎng)站;
3:Web服務(wù);
1.2 什么是.NetFramework
C#是一門編程語言垦沉,它用于實(shí)現(xiàn)于計(jì)算機(jī)的對話, 而.NetFramework就是應(yīng)用程序運(yùn)行時(shí)的執(zhí)行環(huán)境,為應(yīng)用程序提供 以下幾種服務(wù)仍劈。
1:全面的類庫
2:內(nèi)存管理
3:通用類型系統(tǒng):中間語言使用的預(yù)定義數(shù)據(jù)類型
4:開發(fā)結(jié)構(gòu)和技術(shù)厕倍,如ASP.NET技術(shù)
5:語言互操作性:面向.NetFramework的語言編譯器提供了生成中間語言代碼的機(jī)制,這種機(jī)制使得不同語言之間相互操作成為了可能贩疙。
1.3 .NetFramework的組成
前面簡單介紹了一些基礎(chǔ)的概念讹弯,接下來我們看看究竟 NetFramework有哪些部分組成。
主要包括兩個(gè)部分这溅,公共語言運(yùn)行時(shí)(Common Language Runtime,CLR)和.Net Framework類庫(Framework Class Library,FCL)组民。
1:公共語言運(yùn)行時(shí)
它是核心基礎(chǔ),我們可以將CLR看成一個(gè)在執(zhí)行時(shí)管理代碼的代 理芍躏,它提供了內(nèi)存管理邪乍、線程管理和異常處理等服務(wù),而且還負(fù)責(zé)對 代碼實(shí)施嚴(yán)格的類型安全檢查,保證了代碼的正確性庇楞。我們將受CLR 管理的代碼成為托管代碼榜配,不受CLR管理的代碼稱為非托管代碼。
其中CLR包含兩個(gè)部分:通用類型系統(tǒng)(CTS)和公共語言規(guī)范 (CLS)
比如C#和VB.NET都是由CLR進(jìn)行管理的吕晌,但是它們的語法和數(shù) 據(jù)類型各不相同蛋褥,CLR是如何對這兩種不同的語言進(jìn)行托管的呢? 這就得益于CTS。CTS用于解決不同語言之間數(shù)據(jù)類型不同的問題睛驳,如 C#中整形是int烙心,而VB中是Integer,通過CTS可以將兩者轉(zhuǎn)換為Int32, 所有.NET語言都共享這一類型系統(tǒng)乏沸,從而使它們之間能夠無縫操作淫茵。
.NET語言不僅僅存在數(shù)據(jù)類型的不同,語言規(guī)范上也有明顯的 差距蹬跃。CLS就是為了解決這個(gè)問題產(chǎn)生的匙瘪。它制定了.NET平臺為目標(biāo) 的語言所必需支持的最小特征。遵循該標(biāo)準(zhǔn)的語言在.NET平臺下都可 以相互調(diào)用蝶缀。
2:.Net Framework類庫
.Net Framework類庫就是一組DLL程序集的集合丹喻,其中包含了大 量定義好的數(shù)據(jù)類型,這些類型都公開了一些功能翁都。由于FCL中包含 了數(shù)量很多的類型碍论,所以有必要將相關(guān)的一個(gè)類型放到一個(gè)單獨(dú)的命 名空間中加以區(qū)分,如System.IO就包含了用于執(zhí)行IO操作的類型柄慰, 因此鳍悠,使用FCL中的某個(gè)類的時(shí)候,還必須知道該類所在的命名空間先煎。
1.4 C#代碼的執(zhí)行過程
在VS下贼涩,我們只需要按F5就可以編譯和執(zhí)行C#代碼了,下面我 們具體了解一下代碼的執(zhí)行過程薯蝎。
(1)C#代碼編譯為中間語言代碼階段(IL)
(2)中間語言代碼解釋為本機(jī)代碼階段遥倦,為了使IL代碼能夠運(yùn)行, 必需把它編譯為本地代碼占锯,即CPU指令袒哥。這個(gè)過程由CLR的JIT編譯器 來完成。
(3)執(zhí)行本機(jī)代碼消略,JIT編譯生成本機(jī)代碼之后堡称,編譯好的本機(jī)代碼 會被放置到一個(gè)緩沖區(qū),下次再調(diào)用相同的代碼時(shí)艺演,可以直接運(yùn)行緩 沖區(qū)的現(xiàn)有的本機(jī)代碼却紧,從而避免重新驗(yàn)證IL代碼以及把它編譯為本 機(jī)代碼的過程桐臊。使用這種方式,只有JIT發(fā)生的時(shí)候才有一定的性能損失晓殊。