2017/7/17
C#和.NET框架
.NET框架,CLR的C#語(yǔ)言
.net框架是一個(gè)獨(dú)立發(fā)布的軟件包靠瞎,包括了CLR,類庫(kù)以及相關(guān)的語(yǔ)言編譯器等工具。C#代碼經(jīng)過(guò)編譯之后再CLR環(huán)境中運(yùn)行志笼。
.NET框架是一種比MFC或COM變成技術(shù)更一致并面向面對(duì)對(duì)象的環(huán)境,它的特點(diǎn)包裹一下幾點(diǎn)把篓。
1.多平臺(tái):該系統(tǒng)可以在廣發(fā)的計(jì)算機(jī)上運(yùn)行纫溃,包括服務(wù)器,桌面機(jī)到PDA和移動(dòng)電話韧掩。
2.行業(yè)標(biāo)準(zhǔn):該系統(tǒng)使用行業(yè)標(biāo)準(zhǔn)的通信協(xié)議紊浩,比如XML,HTTP,SOAP和WSDL。
3.安全性:該系統(tǒng)能提供更加安全的執(zhí)行環(huán)境疗锐,及時(shí)有來(lái)源可疑的代碼存在坊谁。
.NET框架由三部分組成
執(zhí)行環(huán)境稱為CLR(Common Language Runtime,公共語(yǔ)言運(yùn)行庫(kù))。CLR在運(yùn)行期管理程序的執(zhí)行滑臊。
BCL ?基類庫(kù)
大大改進(jìn)的編程環(huán)境
1.面向?qū)ο蟮木幊汰h(huán)境
CLR,BCL和C#被設(shè)計(jì)的完全面對(duì)對(duì)象口芍,并形成良好的集成環(huán)境
2.自動(dòng)垃圾回收
CLR有一項(xiàng)服務(wù)稱為GC(垃圾收集),它能為你自動(dòng)管理內(nèi)存
3.互操作性
.NET框架的設(shè)計(jì)專門考慮了不同的.NET語(yǔ)言雇卷,操作系統(tǒng)或Win32 DLL和COM之間的互操作性?
(1).NET語(yǔ)言的互操作性允許不同的.NET語(yǔ)言編寫的類鬓椭,只需要遵循一定的規(guī)則即可。
(2).NET提供一種稱為平臺(tái)調(diào)用的特性关划,允許.NET的代碼調(diào)用并使用非.NET的膘融,但通過(guò)標(biāo)準(zhǔn)Win32 DLL 到處的純C函數(shù)的代碼,比如Windows API.
(3).NET框架還允許與COM的互操作祭玉。.NET軟件組件能調(diào)用COM組件,而且COM也能調(diào)用.NET組件氧映,就像它們是COM組件一樣。
4.不需要COM
5.簡(jiǎn)化的部署
6.類型安全性
7.基類庫(kù)
包含以下一些類
通用基礎(chǔ)類:這些類提供了一組極為強(qiáng)大的工具脱货,可以應(yīng)用到廣發(fā)的編程任務(wù)中岛都,比如字符串操作,安全和加密振峻。
集合類:這些類實(shí)現(xiàn)了列表臼疫,字典,散列表以及位數(shù)組
線程和同步類:這些類用于創(chuàng)建多線程程序
XML類:這些用于創(chuàng)建讀取以及操作XML文檔
編譯成CIL
.NET語(yǔ)言的編譯器接受源代碼文件扣孟,并生成名為程序集的輸出文件烫堤。程序集可以使可執(zhí)行的文件或DLL
1 程序集里的代碼并不是本機(jī)代碼,而是一種名稱為CIL(Common Intermediate Language,公共中間語(yǔ)言)的中間語(yǔ)言
2 程序集包含 的信息中包含下列項(xiàng)目
程序的CIL;
程序中使用的類型的元數(shù)據(jù)鸽斟;
對(duì)其他程序集引用的元數(shù)據(jù)拔创。
編譯成本機(jī)代碼并執(zhí)行
程序的CIL直到他被調(diào)用運(yùn)行時(shí)才會(huì)被編譯成本機(jī)代碼,在運(yùn)行時(shí)富蓄,CLR執(zhí)行下面的步驟(如圖):
1剩燥、檢查程序集的安全特性;
2立倍、在內(nèi)存中分配空間灭红;
3、把程序集中的可執(zhí)行的代碼發(fā)送給實(shí)時(shí)(Just-in-Time,JIT)編譯器口注,把其中的一部分編譯成本機(jī)代碼变擒。
程序集中的可執(zhí)行的代碼在需要的時(shí)候由JIT編譯器編譯,然后他就被緩存已被再后來(lái)的程序中執(zhí)行寝志。使用這個(gè)方法以為著不被調(diào)用的代碼不會(huì)被編譯成本機(jī)代碼赁项,而且被調(diào)用到的代碼紙杯編譯一次。
一旦CIL被編譯成本機(jī)代碼澈段,CLR就在他運(yùn)行時(shí)管理它悠菜,執(zhí)行像釋放無(wú)助內(nèi)存,檢查數(shù)組邊界败富,檢查參數(shù)類型和管理異常之類的任務(wù)悔醋。
托管代碼:為.NET框架編寫的代碼,需要CLR兽叮。
非托管代碼:不在CLR控制之下運(yùn)行的代碼芬骄,比如Win32 C/C++ DLL。
編譯和執(zhí)行綜述
無(wú)論原始源文件的語(yǔ)言是什么鹦聪,都遵循同樣的編譯和執(zhí)行過(guò)程
CLR
.NET框架的核心組件是CLR账阻,他在操作系統(tǒng)的頂層并管理程序的執(zhí)行又活,如圖所示硫嘶。CLR還提供下列服務(wù):
自動(dòng)垃圾回收;
安全和認(rèn)證辈灼;
通過(guò)訪問(wèn)BCL(base class library规丽,基類庫(kù))得到廣泛的編程功能蒲牧,包括入院Web服務(wù)和數(shù)據(jù)服務(wù)之類的功能。
CLI
CLI(Common Language Infrastructrue,公共語(yǔ)言基礎(chǔ)結(jié)構(gòu)),他把所有的.NET框架的組件連接成一個(gè)內(nèi)聚的赌莺,一致的系統(tǒng)冰抢。他展示了系統(tǒng)的概念和架構(gòu),并詳細(xì)說(shuō)明了所有軟件都必須堅(jiān)持的規(guī)定和約定艘狭。CLI是一組闡述了系統(tǒng)的架構(gòu)挎扰,規(guī)則和約定的規(guī)范翠订。
CLI的重要組成部分
1.公共類型系統(tǒng)
CTS(Common Type System,公共類型系統(tǒng))定義了那些在托管代碼中一定會(huì)使用的類型的特征遵倦。CTS的一些重要方面如下:
CTS定義了一組豐富的內(nèi)置類型尽超,以及每種類型確定的、詳細(xì)的特性骇吭;
.NET兼容編程語(yǔ)言提供的類型通常映射到CTS中已定義的內(nèi)置類型集的某一個(gè)特殊子集橙弱;
CTS最重要的特征之一是所有類型都集成自公共的基類——object歧寺。
2.公共語(yǔ)言貴方
CLS(conmon language specification燥狰,公共語(yǔ)言規(guī)范)詳細(xì)的說(shuō)明了一個(gè).NET兼容編程語(yǔ)言的規(guī)則,屬性和行為斜筐。其主題包裹數(shù)據(jù)類型和龙致,類結(jié)構(gòu)和參數(shù)傳遞。
縮寫回顧
C#編程概述
命名約定
標(biāo)識(shí)符風(fēng)格
Pascal風(fēng)格? 標(biāo)識(shí)符中每個(gè)單詞首字母大寫?? 用于類型名和成員名????? CarDeck,DealersHand
Canel風(fēng)格??? 除第一個(gè)單詞以外顷链,標(biāo)識(shí)符中所有單詞都首字母大寫? 用于本地變量和方法參數(shù)
字段名稱以下劃線開(kāi)頭:_HighTemp目代、_LowTemp.
6種可以有用戶自己創(chuàng)建的類型:
類類型? class;
結(jié)構(gòu)類型 struct?嗤练;
數(shù)組類型 array榛了;
美劇類型 enum;
委托類型 delegate煞抬;
接口類型 interface霜大;
運(yùn)行中的程序使用兩個(gè)內(nèi)存區(qū)域來(lái)儲(chǔ)存數(shù)據(jù):棧和堆。
棧
棧是一個(gè)內(nèi)存數(shù)組革答,是一個(gè)LIFO(last-in first-out战坤,后進(jìn)先出)的數(shù)據(jù)結(jié)構(gòu),棧儲(chǔ)存幾種類型的數(shù)據(jù):
某些類型變量的值残拐;
程序當(dāng)前的執(zhí)行環(huán)境途茫;
傳遞給方法的參數(shù)。
棧的特征
棧有如下幾個(gè)普遍特征:
數(shù)據(jù)只能從棧的頂端插入和刪除溪食;
把數(shù)據(jù)放到棧頂 稱為入棧囊卜;
從棧頂刪除數(shù)據(jù)稱為出棧;
堆
堆是一塊內(nèi)存區(qū)域错沃,堆里的內(nèi)存可以任意順序存入和移除边败。
程序可以在堆里保存數(shù)據(jù),但并不能顯示的刪除它們捎废。CLR的自動(dòng)GC在判斷出程序的代碼將不會(huì)在訪問(wèn)某數(shù)據(jù)項(xiàng)時(shí)笑窜,會(huì)自動(dòng)清除無(wú)主的堆對(duì)象。
值類型?? 只需要一段單獨(dú)的內(nèi)存登疗,用于儲(chǔ)存實(shí)際的數(shù)據(jù)排截,位于棧中
引用類型? 需要兩段內(nèi)存
第一段儲(chǔ)存實(shí)際的數(shù)據(jù)嫌蚤,位于堆中。
第二段是一個(gè)引用断傲,指向數(shù)據(jù)在堆中的存放位置脱吱,引用放在棧里
說(shuō)明:對(duì)于引用類型的任何對(duì)象,他所有的數(shù)據(jù)成員都存放在堆里认罩,無(wú)論他們是指類型還是引用類型箱蝠。
變量
變量是一個(gè)名稱,表示程序執(zhí)行時(shí)儲(chǔ)存在內(nèi)存中的數(shù)據(jù)
類:基礎(chǔ)
類是一個(gè)能儲(chǔ)存數(shù)據(jù)并執(zhí)行代碼的數(shù)據(jù)結(jié)構(gòu)垦垂,它包含以下內(nèi)容:
數(shù)據(jù)成員宦搬,它儲(chǔ)存與類的實(shí)例相關(guān)的數(shù)據(jù),數(shù)據(jù)成員通常模擬該類所表示的顯示世界事務(wù)的特性
函數(shù)成員劫拗,它執(zhí)行代碼间校。函數(shù)成員通常模擬類所表示的顯示世界事務(wù)的功能和操作。
?類是邏輯相關(guān)的數(shù)據(jù)和函數(shù)的封裝页慷,通常代表真實(shí)世界中的或概念上的事務(wù)憔足。
運(yùn)行中的程序是一組相互作用的對(duì)象。
字段和方法是最重要的類成員類型酒繁,字段是數(shù)據(jù)成員滓彰,方法是函數(shù)成員。
字段
字段是隸屬于類的變量
1州袒、他可以是任何類型揭绑,無(wú)論是預(yù)定義類型還是用戶定義類型
2、和所有變量一樣稳析,字段用來(lái)保存數(shù)據(jù)洗做,并具有如下特征:
??它們可以被寫入;
? 它們可以被讀日镁印诚纸;