




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 附件一中文譯文C#編程語言概述1.c,c+,c#的歷史C#程序語言是建立在C和C+程序語言的精神上的。這個賬目有著很有力的特征和易學(xué)的曲線。不能說C#與C和C+相同,但是因?yàn)镃#是建立在這兩者之上,微軟移除了一些成為更多負(fù)擔(dān)的特征,比如說指針。這部分觀看C和C+,在C#中追蹤它們的發(fā)展。C程序語言原本是被定義在UNIX操作系統(tǒng)中的。過去經(jīng)常編寫一些UNIX的應(yīng)用程序,包括一個C編譯器,最后被用于寫UNIX自己。它普遍認(rèn)可在這個學(xué)術(shù)上的競爭擴(kuò)展到包含這個商業(yè)的世界,腦上。最初的WindowsAPI被定義與使用C同Windows代碼一起工作,并且直到今天至少設(shè)置核心的Windows操作系統(tǒng)API
2、S保持C編譯器。來自一個定義的觀點(diǎn),C缺乏一個細(xì)節(jié)就像Smalltalk這類語言也包含的一樣,一個對象的概念。你將會學(xué)到更多的關(guān)于對象的內(nèi)容在第八章“寫面向?qū)ο蟮拇a”一個對象作為一個數(shù)據(jù)的收集并且設(shè)置了一些操作,代碼可以被C來完成,但是對象的觀念并不能被強(qiáng)制出現(xiàn)在這個語言中。如果你想要構(gòu)造你的代碼使之像一個對象,很好。如果你不想這么做,C也確實(shí)不會介意。對象并不是一個固有的部分在這門語言中,很多人并沒有花很大的經(jīng)歷在這個程序示例中。當(dāng)面向?qū)ο蟮挠^點(diǎn)的發(fā)展開始得到認(rèn)可之后,思考代碼的方法。C+被開發(fā)出,包含了這種改良。它被定義去兼容C(就像所有的C程序同樣也是C+程序,并且可以被C+編譯器編譯
3、)C+語言主要的增加是提供這種新的概念。C+又額外提供了的類(對象的模板)行為的衍生。C+語言是C語言之上的改良體,不熟悉的不常用的語言上,例如VB,C和C+是很底層的,而且需要你錯大量的編碼來使你的應(yīng)用程序很好的運(yùn)行。理和錯誤檢查。和C+可以處理在一些非常給力的應(yīng)用程序中,碼工作的很流暢。被設(shè)定的目標(biāo)是保持對C的兼容,C+不能夠打破C的底層特性。微軟定義的C#保留了很多C和C+的語句。碼并且能想對快地識別代碼。對于C#來說一個很大的優(yōu)勢是它的設(shè)計師并沒有讓它去兼容C和C+。當(dāng)這看起來或許是個錯誤的處理時,事實(shí)上是一個好消息。C#剔除了一些使得C和C+工作起來很困難的東西。始怪癖和在C中發(fā)現(xiàn)的
4、缺陷。C#正在開始一個清潔的石板并且沒有任何兼容需求。因此它能夠保持前輩的強(qiáng)項并且丟棄使得C和C+程序生存困難的弱點(diǎn)2.引進(jìn)C#C#這門在.NET體系中被引進(jìn)的全新語言,是從C+衍生出來的。然而,C#是一門流行的,面向?qū)ο蟮模◤念^到尾)類型安全的語言。語言特征下面的部分提供了一個快速的視角關(guān)于C#語言的一些特征。如果它們中的某些概念對你來說很陌生,不要著急,所有的東西都將在后續(xù)章節(jié)中詳細(xì)說明。類在C#中,所有的代碼和數(shù)據(jù)都必須被附在一個類中。你不能在類外定義一個變量,同樣的你也不能寫任何不在類中的代碼。當(dāng)一個類的對象被創(chuàng)建并且運(yùn)行時,類就被構(gòu)造了。當(dāng)類的對象被釋放時,類也就被銷毀了。類提供了單
5、繼承,所有的類最終從基類獲取的東西就是對象。隨著時間的推移,C#提供了有版本的技術(shù)去幫助你的類的形成來保養(yǎng)代碼的兼容當(dāng)你使用你更早期的類的代碼的時候。下面讓我們來看一個叫做Family的類的例子。這個類包含了兩個靜態(tài)的域來保存家庭成員的第一個名字和最后一個名字。同樣的,有一個方法來返回家庭成員的全名。classClass1publicstringFirstName;publicstringLastName;publicstringFullName()returnFirstName+LastName;注:單繼承意味著一個C#類只能從一個基類中繼承。C#是你能夠打包你的類放到一個被稱作namesp
6、ace類的集合里面。并且可以在邏輯聚合上幫助安排類的收集。當(dāng)你開始學(xué)習(xí)C#的時候,很明顯所有的namespace都是和.NET類型的系統(tǒng)相關(guān)的。微軟同樣選擇包含了一些類輔助于兼容以前的代碼和API的通道。這些類同樣包含在微軟的namespace中。數(shù)據(jù)類型C#讓你使用兩種類型的數(shù)據(jù)工作:值類型和引用類型。值類型保存實(shí)際的值。引用類型保存實(shí)際的值儲存在存儲器別處的位置。原始的數(shù)據(jù)類型,例如字符型,整型,浮點(diǎn)型,枚舉型還有結(jié)構(gòu)體類型,這些都是值類型。而對象和數(shù)組類型被處理成了引用類型。C#預(yù)定義了引用類型(對象和字符串)新,字節(jié),無符號短整型,無符號整型,無符號長整型,浮點(diǎn)型,雙精度浮點(diǎn)型,布爾型
7、,字符型和小數(shù)類型)的值類型和引用類型最終都會被一個基本類型的對象執(zhí)行。C#同樣允許你將一個值或者一個類型轉(zhuǎn)變?yōu)榱硗庖粋€值或一種類型。你可以使用隱式的轉(zhuǎn)換策略或者顯式的轉(zhuǎn)換策略。隱式的轉(zhuǎn)換策略總是成功并且并不丟失任何信息(例如,你可以將一個整型轉(zhuǎn)換為一個長整型而不用丟失任何信息因?yàn)殚L整型比整型長)換策略可能會是你丟失一些數(shù)據(jù)丟失因?yàn)殚L整型可以比整型保留更多的值)轉(zhuǎn)換發(fā)生。前后引用參考第三章“同變量一起工作”來找到更多的關(guān)于顯式和隱式轉(zhuǎn)換策略的信息。你可以同時使用單維和多維的數(shù)組在C#中。多維數(shù)組能夠變成一個矩陣。當(dāng)這個矩陣與多維數(shù)組有相同的面積大小?;蛘邊⒉畈积R的,當(dāng)有些數(shù)組有不一樣的面積大小
8、。類和結(jié)構(gòu)體可以擁有數(shù)據(jù)成員被稱為屬性和字段。變量。你可以定義一個叫做Employee的結(jié)構(gòu)體,例如,有一個被稱作Name的域,如果你定義了一個Employee類型的變量叫做CurrenrEmployee,你可以通過寫CurrentEmployee.Name取回這些雇員的名字。碼賦值之后什么應(yīng)該發(fā)生。如果雇員的名字必須被一個數(shù)據(jù)庫讀,例如,你可以寫一個代碼“當(dāng)一些人詢問名字屬性的值時,從數(shù)據(jù)庫中讀名字,并且返回這個名字用string類型”函數(shù)一個函數(shù)是一種可以隨時使用的代碼,代碼。一個函數(shù)的例子將會像FullName函數(shù)更早的展示的那樣,在這一章中,在Family類中。一個函數(shù)通常會聯(lián)合一些返
9、回信息的代碼,而一個方法通常不返回信息。然而對于我們而言,我們一般都會把它們都?xì)w結(jié)于函數(shù)。函數(shù)可以擁有四種參數(shù):輸入的參數(shù)有值傳遞到函數(shù)內(nèi),但是函數(shù)無法改變它們的值。輸出的參數(shù)沒有值當(dāng)他們被傳遞給函數(shù)時,但是函數(shù)可以給它們值并且將這個值傳回給它的調(diào)用者。,引用參數(shù)通過引用傳遞另外的一個值。它們有一個值進(jìn)入函數(shù),并且這個值可以在函數(shù)中被更改。參數(shù)參數(shù)在列表中定義了一個數(shù)組變量。C#和CLR一同工作來提供自動的存儲管理。或者“留足夠的空間讓這個對象使用”這樣的代碼。CLR監(jiān)視你的內(nèi)存使用并且自動的取回更逗當(dāng)你需要它的時候?;厥斩〤#提供了大量的運(yùn)算符使得你能夠?qū)懘罅康臄?shù)學(xué)和逐位運(yùn)算的表達(dá)式
10、。他們當(dāng)中的大量(并不是所有)運(yùn)算符可以被重新定義,是你能夠改變這些運(yùn)算符的工作。C#提供了一個長的報表的清單是你能夠定義各種各樣的處理路徑通過你的代碼。通過報表的操作,使用關(guān)鍵字,就像switch,while,for,break和continue能夠使你的代碼根據(jù)變量值的不同分入到不同的路徑中。類能夠包含代碼和數(shù)據(jù)。每一個成員對其他對象的可見性。C#提供了public,protected,internal,protectedinternal和private這些可接近的范圍。變量變量可以被定義為常量。常量有固定的值并且你的代碼執(zhí)行過程中不能被改變,這個PI的值,例如,是一個很好的常量的例子,因
11、為她得值將不會被改變在你的代碼運(yùn)行過程中。枚舉類型詳細(xì)的定義了一種有關(guān)常量的名稱。例如,你可以定義一個枚舉類型的行星使用值為MercuryV在你的代碼中。如果你使用一個變量去表示行星的時候,用這個枚舉類型的names可以使你的代碼變的更易讀。C#提供了一個嵌入式的機(jī)制去定義和處理一些事件。如果你寫了一個類執(zhí)行了很漫長的操作,你或許想調(diào)用一個事件,當(dāng)這個事件結(jié)束的時候,客戶可以簽署這個時間并且抓住這個事件在他們自己的代碼中,他可以讓他們被通知當(dāng)你完成了這個漫長的預(yù)算,這個事件處理機(jī)制在C#中使用了委托,一個引用函數(shù)的變量。注:事件處理是一個在你代碼中的程序,當(dāng)一個時間發(fā)生時它決定了什么動作將會發(fā)
12、生。例如用戶點(diǎn)擊了一個按鈕。如果你的類保存了一個值,寫一些叫做分度器的代碼是你的類可以被訪問就好像它是一個數(shù)組。假定你寫了一個叫做Rainbow的類,例如,它包含了一套顏色在這個彩虹中。訪問者或許想要些MYRainbow0來取出在彩虹中的第一個顏色。你可以寫一個分度器在你的Rainbow類中來定義什么將會被返回當(dāng)這個訪問者訪問你的類時,就好像它是一個值的數(shù)組。接口C#提供了接口,它聚集了屬性,方法,和闡述一套功能的事件。C#的類可以執(zhí)行接口,它通過接口告訴使用者這個類提供的一整套功能文件。何現(xiàn)有的代碼,它能盡可能少的兼容問題。曾經(jīng)有一個接口被公開了,它不能被改變,但是它能夠通過繼承來進(jìn)化。C#
13、的類能夠執(zhí)行許多接口,即使這個類只能從一個基類繼承。讓我們看一個現(xiàn)實(shí)世界的C#中有利于舉例說明接口的非常明確的規(guī)則的例子。許多應(yīng)用程序?qū)∈褂媒裉焯峁┑奶砑禹棥?zhí)行的時候有讀取添加項的能力。要做這些,這個添加項必須遵守一些規(guī)則。DLL添加項必須展示一個叫CEEntry的函數(shù)。并且必須使用CEd作為DLL文件名的開頭。當(dāng)我們運(yùn)行我們的代碼時,它可以掃描正在工作的以CEd開頭的所有DLL的目錄。當(dāng)它發(fā)現(xiàn)了一個,就被讀取下來。然后它用GetProcAddress來找出DLL中的CEEntry函數(shù)。由此證明你服從所有的規(guī)則去建立一個添加項是必要的。這種創(chuàng)建讀取添加項是必要的,因?yàn)樗鼡?dān)負(fù)了更多的不必要的代
14、碼責(zé)任。如果我們使用一個接口在這個例子中,你的DLL添加項可以應(yīng)用于一個接口。由此保證所有必須的方法,屬性和事件出現(xiàn)在DLL中,和作為文件指定的函數(shù)。屬性屬性聲明了額外的信息關(guān)于你的類對于CLR。在過去,如果你想要自己描述你的類,你不得不用一些分散的途徑在存放在外部的文件中,例如IDL或者事件的HTML文件。通過你的努力,屬性解決了這個問題,這個發(fā)展者,約束了一些信息在類中,任何種類的信息,例如,在類中,定義它怎么行動當(dāng)它被用到的時候。可能性是沒完沒了的,這也是為什么微軟會包含很多預(yù)定義的屬性在.NET結(jié)構(gòu)里。編譯C#運(yùn)行你的C#代碼通過C#編譯器產(chǎn)生了兩類重要的信息:代碼和元數(shù)據(jù)。接下來的部
15、分描述了這兩種主題并且完成了建立在.NET代碼上的一塊二進(jìn)制的審查,那就是匯編。微軟中間語言(MSIL)被C#編譯器輸出的代碼是寫在一種叫做微軟中間語言中的MSIL是用來構(gòu)造一套詳細(xì)的說明來指導(dǎo)你怎樣執(zhí)行的你的代碼。它包含了操作的說明,例如變量的初始化,喚起對象的方法,錯誤處理以及聲明一些新的東西。C#并不僅僅是一種在編寫過程中變化的來自MSIL源代碼的語言。所有的.NET兼容的語言,包括VB.NET和C+管理,當(dāng)它們的源代碼編譯完成后產(chǎn)生了MSIL。所有的.NET語言都是用相同的運(yùn)行時間,所以來自不同語言的和不同編譯器的代碼可以很方便地在一起工作。對于物理CPU而言,MISL并不是一套明確的
16、指令。它不知道任何關(guān)于你機(jī)器CPU的事,同樣的你的機(jī)器也不知道任何有關(guān)MSIL的事。那么,當(dāng)你的CPU不能讀取MSIL的時候,說明代碼中。這個擊沉被稱作恰好夠用編寫,或者JIT。JIT編譯器的工作是翻譯你的普遍性的MSIL代碼給機(jī)器以便CPU可以執(zhí)行你的代碼。你也許想知道在進(jìn)程中一個額外的步驟是什么樣的。當(dāng)一個編譯器可以立刻產(chǎn)生CPU解釋的代碼是為什么MSIL產(chǎn)生了?終究,編譯器總之在之后做了這些。這里有很多引起這個的原因。首先,MSIL使你能夠較容易的編寫代碼當(dāng)它移動到一個不同的硬件中。假設(shè)你已經(jīng)寫了一些C#代碼,并且你想讓它同時運(yùn)行在你的臺式機(jī)和手提設(shè)備上。非常有可能的是這兩種設(shè)備有著不同
17、的CPU。如果你只有一個C#編譯器其目標(biāo)是一個明確的CPU,那么你就需要兩個C#編譯器:一個的目標(biāo)是臺式機(jī)的CPU,另一個的目標(biāo)是手提設(shè)備的CPU。你不得不編譯你的代碼兩次,以確保你的正確代碼使用在了正確的設(shè)備上。有了MSIL,你只用編寫一次。安裝了.NET結(jié)構(gòu)在你的臺式機(jī)里,它包含了一個JIT編譯器用來翻譯你的MSIL中的CPU特定代碼給你的機(jī)器。安裝了.NET結(jié)構(gòu)在你的手提設(shè)備中,它包含了一個JIT編譯器用來翻譯同樣的MSIL中的CPU特定代碼給你的手提設(shè)備。以運(yùn)行在任何擁有.NETJIT編譯器的設(shè)備上的MSIL基本代碼。你現(xiàn)在僅僅有一個可以運(yùn)行在任何擁有.NETJIT編譯器的設(shè)備上的MS
18、IL基本代碼在這些設(shè)備上的JIT編譯器能夠照顧你的代碼使他們運(yùn)行的很順利。另外一個編譯器使用MSIL的原因是指令的設(shè)置能夠很容易地被一個認(rèn)證近程讀取。編譯器的一部分工作就是核實(shí)你的代碼以確保它能夠盡可能的清晰。正確地訪問內(nèi)存,型時。這些檢查確保了你的代碼不會執(zhí)行任何能夠使你代碼崩潰的指令。MSIL指令設(shè)置定義使得這個檢查進(jìn)程想對地易懂。CPU特定指令設(shè)置是為了快速執(zhí)行代碼而優(yōu)化的。但是它們使得代碼難以被閱讀,也因此很難被檢查。有一個可以立刻輸出CPU特定代碼的C#編譯器能夠使代碼的檢查很困難或者甚至不可能。允許.NET結(jié)構(gòu)的JIT編譯器核實(shí)你的代碼以確保你的代碼通過一個漏洞很大的路徑訪問內(nèi)存并
19、且變量類型會被正確地使用。元數(shù)據(jù)匯編進(jìn)程同樣額輸出元數(shù)據(jù)。這是一個很重要的一部分.NET代碼分享的故事。不論你要用C#去建立一個客戶端的應(yīng)用程序還是用C#去建立一個被一些人用在應(yīng)用程序上的類庫,你都會想要利用一些已經(jīng)編譯好的.NET代碼。那個代碼或許被微軟提供了一部分.NET結(jié)構(gòu),或者它也許被一些網(wǎng)上的用戶提供。使用外來代碼的關(guān)鍵是讓C#編譯器知道那個類和那個變量在另外的基礎(chǔ)代碼中以便它能夠在你工作的預(yù)編譯中發(fā)現(xiàn)并將你寫的代碼與源代碼相匹配。將元數(shù)據(jù)看目錄對于你的編譯代碼而言。C#編譯的源代碼位數(shù)在編譯代碼中和MSIL的生成一同存在。的方法和變量的類型完全地在元數(shù)據(jù)中被描述,準(zhǔn)備好被其他應(yīng)用程
20、序來讀取。例如,VB.NET可以從一個.NET庫中讀取元數(shù)據(jù)來提供對一個特定的類來說列出的所有能夠被有效使用的方法的智能感應(yīng)的能力。如果你已經(jīng)使用COM進(jìn)行工作,你或許熟悉了類型庫。類型庫的目標(biāo)是提供同樣的目錄功能給COM對象。然而,類型庫從一些局限之處提供,事實(shí)上并不是所有的關(guān)于目標(biāo)的數(shù)據(jù)都能被放入類型庫中。在.NET中的元數(shù)據(jù)并不具有這個缺點(diǎn)。所有的用來描述類的信息的代碼被放置在元數(shù)據(jù)中。構(gòu)件有時,你需要用C#去建立一個終端的應(yīng)用程序。這些應(yīng)用程序被打包成一個可執(zhí)行的文件并且使用.EXE作為擴(kuò)展名。C#完全地支持.EXE文件的建立。然而,也有幾次你不想以被用于其它的程序。你也許會想要建立一
21、些實(shí)用的C#類,比如傳給一個想要使用你的類在VB.NET應(yīng)用程序中的VB.NET的開發(fā)者。在這種情況下,你將不會建立一個應(yīng)用程序,取而代之的你將建立一個構(gòu)件。一個構(gòu)件是一個元數(shù)據(jù)的代碼包。當(dāng)做一個單元來配置,并且這些類將會分享同樣層級的版本控制,安全信息和動態(tài)需求。將構(gòu)件看做一個邏輯的DLL。如果你對微軟的翻譯服務(wù)或者COM+很熟悉,那么你可以把構(gòu)件看做與.NET等價的包。有兩種構(gòu)件:私有構(gòu)件和全局構(gòu)件。當(dāng)你建立了你自己的構(gòu)件,你不需要指明你是想建立一個全局的構(gòu)件還是私有的構(gòu)件。你只能使你的代碼被單獨(dú)的應(yīng)用程序訪問。你的構(gòu)件是一個類似于DLL的包,并且被安裝進(jìn)同樣的目錄當(dāng)你的應(yīng)用程序運(yùn)行它時。
22、應(yīng)用程序是在與你構(gòu)件相同目錄下時才可執(zhí)行的。如果你想要在更多的應(yīng)用程序中分享你的代碼,全局的構(gòu)件。全局構(gòu)件可以被任何系統(tǒng)的.NET應(yīng)用程序使用,而不用考慮它被安裝在哪個目錄中。微軟裝配構(gòu)件作為.NET結(jié)構(gòu)的一部分,并且每個微軟構(gòu)件被安裝作為一個全局構(gòu)件。微軟結(jié)構(gòu)SDK中包含了公用的可以從全局構(gòu)件存儲器中安裝和刪除構(gòu)件的功能。C#在某種程度上可以看作是.NET面向Windows環(huán)境的一種編程語言。在過去的十幾年里,雖然VB和C+最終已成為非常強(qiáng)大的語言,來的一些內(nèi)容。對于VisualBasic來說,它的主要優(yōu)點(diǎn)是很容易理解,許多編程工作都很容易完成,基本上隱藏了WindowsAPI和COM組件結(jié)
23、構(gòu)的內(nèi)涵。其缺點(diǎn)是VisualBasic從來沒有實(shí)現(xiàn)真正意義上的面向?qū)ο?,的早期版本(BASIC主要是為了讓初學(xué)者更容易理解,而不是為了編寫大型商業(yè)應(yīng)用程序),所以不能真正成為結(jié)構(gòu)化或面向?qū)ο蟮木幊陶Z言。另一方面,C+在ANSIC+語言定義中有其自己的根。它與ANSI不完全兼容,因?yàn)镸icrosoft是在ANSI定義標(biāo)準(zhǔn)化之前編寫C+編譯器的,但已經(jīng)相當(dāng)接近了。遺憾的是,這導(dǎo)致了兩個問題。其一,ANSIC+是在十幾年前的技術(shù)條件下開發(fā)的,因此不支持現(xiàn)在的概念(例如Unicode字符串和生成XML文檔),某些古老的語法結(jié)構(gòu)是為以前的編譯器設(shè)計的(例如成員函數(shù)的聲明和定義是分開的)。其二,Micr
24、osoft同時還試圖把C+演變?yōu)橐环N用于在Windows上執(zhí)行高性能任務(wù)的語言在語言中避免添加大量Microsoft專用的關(guān)鍵字和各種庫。其結(jié)果是在Windows中,該語言成為了一種非常雜亂的語言。讓一個C+開發(fā)人員說說字符串有多少個定義方式就可以說明這一點(diǎn):char*、LPTSTR、(MFC版本)、CString(WTL版本)、wchar_t*和OLECHAR*等?,F(xiàn)在進(jìn)入.NET時代一一一種全新的環(huán)境,它對這兩種語言都進(jìn)行了新的擴(kuò)展。Microsoft給C+添加了許多Microsoft專用的關(guān)鍵字,并把VB演變?yōu)閂B.NET,保留了一些基本的VB語法,但在設(shè)計上完全不同,從實(shí)際應(yīng)用的角度來
25、看,VB.NET是一種新語言。在這里,VisualC#.NET。Microsoft在正式場合把C#描述為一種簡單、現(xiàn)代、面向?qū)ο蟆㈩愋头浅0踩?、派生于C和C+的編程語言。大多數(shù)獨(dú)立的評論員對其說法是“派生于C、C+和Java”C#非常類似于C+和Java,并用括號()來標(biāo)記代碼塊,用分號分隔各行語句。對C#代碼的第一印象是它非常類似于C+或Java代碼。但在這些表面上的類似性后面,C#學(xué)習(xí)起來要比C+容易得多,但比Java難一些。其設(shè)計與現(xiàn)代開發(fā)工具的適應(yīng)性要比其他語言更高,它同時具有VisualBasic的易用性、高性能以及C+的低級內(nèi)存訪問性。C#包括以下一些特性:完全支持類和面向?qū)ο缶幊?/p>
26、,包括接口和繼承、虛函數(shù)和運(yùn)算符重載的處理。定義完整、一致的基本類型集。對自動生成XML文檔說明的內(nèi)置支持。自動清理動態(tài)分配的內(nèi)存。可以用用戶定義的特性來標(biāo)記類或方法。這可以用于文檔說明,對編譯有一定的影響(例如,把方法標(biāo)記為只在調(diào)試時編譯)。對.NET基類庫的完全訪問權(quán),并易于訪問WindowsAPI。可以使用指針和直接內(nèi)存訪問,但C#語言可以在沒有它們的條件下訪問內(nèi)存。以VB的風(fēng)格支持屬性和事件。改變編譯器選項,ActiveX控件(COM組件)相同的方式由其他代碼調(diào)用。C#可以用于編寫ASP.NET動態(tài)Web頁面和XMLWeb服務(wù)。應(yīng)該指出,對于上述大多數(shù)特性,VB.NET和Managed
27、C+也具備。但C#從一開始就使用.NET,對.NET特性的支持不僅是完整的,而且提供了比其他語言更合適的語法。C#語言本身非常類似于Java,但其中有一些改進(jìn),因?yàn)镴ava并不是為應(yīng)用于.NET環(huán)境而設(shè)計的。在結(jié)束這個主題前,還要指出C#的兩個局限性。其一是該語言不適用于編寫時間急迫或性能非常高的代碼,例如一個要運(yùn)行1000或1050次的循環(huán),并在不需要這些循環(huán)時,立即清理它們所占用的資源。在這方面,C+可能仍是所有低級語言中的佼佼者。其二是C#缺乏性能極高的應(yīng)用程序所需要的關(guān)鍵功能,包裹保證在代碼的特定地方與性的內(nèi)聯(lián)和析構(gòu)函數(shù)函數(shù)。但這類應(yīng)用程序非常少。附件二英文原文C#Programmin
28、gLanguageOverviewAHistoryofC,C+,andC#TheC#programminglanguagewascreatedinthespiritoftheCandC+programminglanguages.Thisaccountsforitspowerfulfeaturesandeasylearningcurve.ThesamecantbesaidforCandC+,butbecauseC#wascreatedfromthegroundup,Microsofttookthelibertyofremovingsomeofthemoreburdensomefeaturessu
29、chaspointers.ThissectiontakesalookattheCandC+languages,tracingtheirevolutionintoC#.TheCprogramminglanguagewasoriginallydesignedforuseontheUNIXoperatingsystem.CwasusedtocreatemanyUNIXapplications,includingaCcompiler,andwaseventuallyusedtowriteUNIXitself.Itswidespreadacceptanceintheacademicarenaexpand
30、edtoincludethecommercialworld,andsoftwarevendorssuchasMicrosoftandBorlandreleasedCcompilersforpersonalcomputers.TheoriginalWindowsAPIwasdesignedtoworkwithWindowscodewritteninC,andthelatestsetofthecoreWindowsoperatingsystemAPIsremaincompatiblewithCtothisday.Fromadesignstandpoint,Clackedadetailthatoth
31、erlanguagessuchasSmalltalkhadalreadyembraced:theconceptofanobject.YoulllearnmoreaboutobjectsinChapter8,WritingObject-OrientedCode.Fornow,thinkofanobjectasacollectionofdataandasetofoperationsthatcanbeperformedonthatdata.Object-stylecodingcouldbeaccomplishedusingC,butthenotionofanobjectwasnotenforcedb
32、ythelanguage.Ifyouwantedtostructureyourcodetoresembleanobject,fine.Ifyoudidnt,fine.Creallydidntcare.Objectswerentaninherentpartofthelanguage,somanypeopledidntpaymuchattentiontothisprogrammingparadigm.Afterthenotionofobject-orienteddevelopmentbegantogainacceptance,itbecameclearthatCneededtoberefinedt
33、oembracethisnewwayofthinkingaboutcode.C+wascreatedtoembodythisrefinement.ItwasdesignedtobebackwardlycompatiblewithC(suchthatallCprogramswouldalsobeC+programsandcouldbecompiledwithaC+compiler).ThemajoradditiontotheC+languagewassupportforthisnewobjectconcept.TheC+languageaddedsupportforclasses(whichar
34、etemplatesofobjects),andenabledanentiregenerationofCprogrammerstothinkintermsofobjectsandtheirbehavior.TheC+languageisanimprovementoverC,butitstillhassomedisadvantages.CandC+canbehardtogetahandleon.Unlikeeasy-to-uselanguageslikeVisualBasic,CandC+areverylowlevelandrequireyoutodoalotofcodingtomakeyour
35、applicationrunwell.Youhavetowriteyourowncodetohandleissuessuchasmemorymanagementanderrorchecking.CandC+canresultinverypowerfulapplications,butyouneedtoensurethatyourcodeworkswell.Onebugcanmaketheentireapplicationcrashorbehaveunexpectedly.BecauseoftheC+designgoalofretainingbackwardcompatibilitywithC,
36、C+wasunabletobreakawayfromthelowlevelnatureofC.MicrosoftdesignedC#toretainmuchofthesyntaxofCandC+.DeveloperswhoarefamiliarwiththoselanguagescanpickupC#codeandbegincodingrelativelyquickly.ThebigadvantagetoC#,however,isthatitsdesignerschosenottomakeitbackwardlycompatiblewithCandC+.Whilethismayseemlike
37、abaddeal,itsactuallygoodnews.C#eliminatesthethingsthatmakesCandC+difficulttoworkwith.BecauseallCcodeisalsoC+code,C+hadtoretainalloftheoriginalquirksanddeficienciesfoundinC.C#isstartingwithacleanslateandwithoutanycompatibilityrequirements,soitcanretainthestrengthsofitspredecessorsanddiscardtheweaknes
38、sesthatmadelifehardforCandC+programmers.IntroducingC#C#,thenewlanguageintroducedinthe.NETFramework,isderivedfromC+.However,C#isamodern,objected-oriented(fromthegroundup)type-safelanguage.LanguagefeaturesThefollowingsectionstakeaquicklookatsomeofthefeaturesoftheC#language.Ifsomeoftheseconceptsdontsou
39、ndfamiliartoyou,dontworry.Allofthemarecoveredindetailinlaterchapters.ClassesAllcodeanddatainC#mustbeenclosedinaclass.Youcantdefineavariableoutsideofaclass,andyoucantwriteanycodethatsnotinaclass.Classescanhaveconstructors,whichexecutewhenanobjectoftheclassiscreated,andadestructor,whichexecuteswhenano
40、bjectoftheclassisdestroyed.Classessupportsingleinheritance,andallclassesultimatelyderivefromabaseclasscalledobject.C#supportsversioningtechniquestohelpyourclassesevolveovertimewhilemaintainingcompatibilitywithcodethatusesearlierversionsofyourclasses.Asanexample,takealookataclasscalledFamily.Thisclas
41、scontainsthetwostaticfieldsthatholdthefirstandlastnameofafamilymemberaswellasamethodthatreturnsthefullnameofthefamilymember.classClass1publicstringFirstName;publicstringLastName;publicstringFullName()returnFirstName+LastName;NoteSingleinheritancemeansthataC#classcaninheritfromonlyonebaseclass.C#enab
42、lesyoutogroupyourclassesintoacollectionofclassescalledanamespace.Namespaceshavenames,andcanhelporganizecollectionsofclassesintologicalgroupings.AsyoubegintolearnC#,itbecomesapparentthatallnamespacesrelevanttothe.NETFrameworkbeginwithSystem.Microsofthasalsochosentoincludesomeclassesthataidinbackwards
43、compatibilityandAPIaccess.TheseclassesarecontainedwithintheMicrosoftnamespace.DatatypesC#letsyouworkwithtwotypesofdata:valuetypesandreferencetypes.Valuetypesholdactualvalues.Referencetypesholdreferencestovaluesstoredelsewhereinmemory.Primitivetypessuchaschar,intandfloat,aswellasenumeratedvaluesandst
44、ructures,arevaluetypes.Referencetypesholdvariablesthatdealwithobjectsandarrays.C#comeswithpredefinedreferencetypes(objectandstring),aswellaspredefinedvaluetypes(sbyte,short,int,long,byte,ushort,uint,ulong,float,double,bool,char,anddecimal).Youcanalsodefineyourownvalueandreferencetypesinyourcode.Allv
45、alueandreferencetypesultimatelyderivefromabasetypecalledobject.C#allowsyoutoconvertavalueofonetypeintoavalueofanothertype.Youcanworkwithbothimplicitconversionsandexplicitconversions.Implicitconversionsalwayssucceedanddontloseanyinformation(forexample,youcanconvertaninttoalongwithoutlosinganydatabeca
46、usealongislargerthananint).Explicitconversionsmaycauseyoutolosedata(forexample,convertingalongintoanintmayresultinalossofdatabecausealongcanholdlargervaluesthananint).Youmustwriteacastoperatorintoyourcodetomakeanexplicitconversionhappen.Cross-ReferenceRefertoChapter3,WorkingwithVaboutimplicitandexpl
47、icitconversions.Youcanworkwithbothone-dimensionalandmultidimensionalarraysinC#.Multidimensionalarrayscanberectangular,inwhicheachofthearrayshasthesamedimensions,orjagged,inwhicheachofthearrayshasdifferentdimensions.Classesandstructurescanhavedatamemberscalledpropertiesandfields.Fieldsarevariablestha
48、tareassociatedwiththeenclosingclassorstructure.YoumaydefineastructurecalledEmployee,forexample,thathasafieldcalledName.IfyoudefineavariableoftypeEmployeecalledCurrentEmployee,youcanretrievetheemployeesnamebywritingCurrentEmployee.Name.Propertiesarelikefields,butenableyoutowritecodetospecifywhatshoul
49、dhappenwhencodeaccessesthevalue.Iftheemployeesnamemustbereadfromadatabase,forexample,youcanwritecodethatsays,whensomeoneasksforthevalueoftheNameproperty,readthenamefromthedatabaseandreturnthenameasastring.FunctionsAfunctionisacallablepieceofcodethatmayormaynotreturnavaluetothecodethatoriginallycalle
50、dit.AnexampleofafunctionwouldbetheFullNamefunctionshownearlier,inthischapter,intheFamilyclass.Afunctionisgenerallyassociatedtopiecesofcodethatreturninformationwhereasamethodgenerallydoesnotreturninformation.Forourpurposeshowever,wegeneralizeandrefertothembothasfunctions.Functionscanhavefourkindsofpa
51、rameters:Inputparametershavevaluesthataresentintothefunction,butthefunctioncannotchangethosevalues.Outputparametershavenovaluewhentheyaresentintothefunction,butthefunctioncangivethemavalueandsendthevaluebacktothecaller.Referenceparameterspassinareferencetoanothervalue.Theyhaveavaluecomingintothefunc
52、tion,andthatvaluecanbechangedinsidethefunction.Paramsparametersdefineavariablenumberofargumentsinalist.C#andtheCLRworktogethertoprovideautomaticmemorymanagement.Youdontneedtowritecodethatsaysallocateenoughmemoryforanintegerorfreethememorythatthisobjectwasusing.TheCLRmonitorsyourmemoryusageandautomat
53、icallyretrievesmorewhenyouneedit.Italsofreesmemoryautomaticallywhenitdetectsthatitisnolongerbeingused(thisisalsoknownasGarbageCollection).C#providesavarietyofoperatorsthatenableyoutowritemathematicalandbitwiseexpressions.Many(butnotall)oftheseoperatorscanberedefined,enablingyoutochangehowtheoperator
54、swork.C#supportsalonglistofstatementsthatenableyoutodefinevariousexecutionpathswithinyourcode.Flowcontrolstatementsthatusekeywordssuchasif,switch,while,for,breakandcontinueenableyourcodetobranchoffintodifferentpaths,dependingonthevaluesofyourvariables.Classescancontaincodeanddata.Eachclassmemberhass
55、omethingcalledanaccessibilityscope,whichdefinesthemembersvisibilitytootherobjects.C#supportspublic,protected,internal,protectedinternal,andprivateaccessibilityscopes.VariablesVariablescanbedefinedasconstants.Constantshavevaluesthatcannotchangeduringtheexecutionofyourcode.Thevalueofpi,forinstance,isa
56、goodexampleofaconstant,becauseitsvaluewontbechangingasyourcoderuns.Enumtypedeclarationsspecifyatypenameforarelatedgroupofconstants.Forexample,youcoulddefineanenumofPlanetswithvaluesofMercury,Vthosenamesinyourcode.Usingtheenumnamesincodemakescodemorereadablethanifyouusedanumbertorepresenteachplanet.C
57、#providesabuilt-inmechanismfordefiningandhandlingevents.Ifyouwriteaclassthatperformsalengthyoperation,youmaywanttoinvokeaneventwhentheoperationiscompleted.Clientscansubscribetothateventandcatchtheeventintheircode,whichenablesthemtobenotifiedwhenyouhavecompletedyourlengthyoperation.Theeventhandlingme
58、chanisminC#usesdelegates,whicharevariablesthatreferenceafunction.NoteAneventhandlerisaprocedureinyourcodethatdeterminestheactionstobeperformedwhenaneventoccurs,suchastheuserclickingabutton.Ifyourclassholdsasetofvalues,clientsmaywanttoaccessthevaluesasifyourclasswereanarray.Youcanwriteapieceofcodecal
59、ledanindexertoenableyourclasstobeaccessedasifitwereanarray.SupposeyouwriteaclasscalledRainbow,forexample,thatcontainsasetofthecolorsintherainbow.CallersmaywanttowriteMyRainbow0toretrievethefirstcolorintherainbow.YoucanwriteanindexerintoyourRainbowclasstodefinewhatshouldbereturnedwhenthecalleraccesse
60、syourclass,asifitwereanarrayofvalues.InterfacesC#supportsinterfaces,whicharegroupsofproperties,methods,andeventsthatspecifyasetoffunctionality.C#classescanimplementinterfaces,whichtellsusersthattheclasssupportsthesetoffunctionalitydocumentedbytheinterface.Youcandevelopimplementationsofinterfaceswith
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 代寫贈與合同范本
- 方餐墊行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報告
- 仿古水泥模具轉(zhuǎn)讓合同范本
- 二零二五年度家庭兒童保姆聘請及成長檔案管理協(xié)議
- 2025年度個人勞務(wù)合同與新能源技術(shù)應(yīng)用合同
- 2025年度全國青少年足球錦標(biāo)賽承辦協(xié)議書
- 2025年度商鋪買賣協(xié)議合同(含租金支付保障及違約責(zé)任)
- 2025年度保險代理合同解除通知模板
- 二年級數(shù)學(xué)北師大版上冊數(shù)學(xué)好玩《2尋找身體上的數(shù)學(xué)“秘密”》教學(xué)設(shè)計教案
- 旅游業(yè)務(wù)居間合作協(xié)議終止
- 鞋業(yè)-品質(zhì)培訓(xùn)
- 中級會計實(shí)務(wù)所得稅課件
- 起重指揮人員安全操作規(guī)程
- 精神分裂癥的護(hù)理PPT
- JJG875-2005數(shù)字壓力計檢定規(guī)程
- 中小學(xué)生安全教育手冊全面版
- 09《馬克思主義政治經(jīng)濟(jì)學(xué)概論(第二版)》第九章
- 公司與個人合伙買車經(jīng)營協(xié)議書
- DDI-能力解構(gòu)詞典
- 2015-2022年江西電力職業(yè)技術(shù)學(xué)院高職單招語文/數(shù)學(xué)/英語筆試參考題庫含答案解析
- 1 聚聚散散 教案人教版美術(shù)四年級下冊
評論
0/150
提交評論