[你必须知道的.NET]第二十九回:.NET十年(上)
引言
語(yǔ)言是程序開(kāi)發(fā)者行走江湖的手上利器,各大門派的高手在論壇、博客為了自家門派爭(zhēng)吵不已早是技術(shù)世界中的亮麗風(fēng)景,雖多少為剛剛踏入江湖的新手提供了思考的素材,但也同時(shí)迷惑了初出茅廬的前行方向。
本文不欲計(jì)較門派的高下,旨在明辨技術(shù)的真諦,這就是.NET平臺(tái)下的開(kāi)發(fā)利器:C#語(yǔ)言,并從其變遷的進(jìn)程中對(duì)于.NET技術(shù)發(fā)展把玩一番。
在上篇,我們走在歷史,對(duì).NET的過(guò)去尤其是c#語(yǔ)言做以回顧,具體而言就是.NET 1.0、2.0、3.0的一路走來(lái)。
.NET之,歷史腳步
C#十年了。這個(gè)日期是從Anders Hejlsberg在1998年組建C#團(tuán)隊(duì)開(kāi)始算起的,掐指算來(lái)已是十年有余了。作為.NET平臺(tái)下的靜態(tài)強(qiáng)類型語(yǔ)言,在過(guò)去10年的發(fā)展歷程中披荊斬棘,已經(jīng)逐漸成為應(yīng)用開(kāi)發(fā)語(yǔ)言中的佼佼者。從TIOBE開(kāi)發(fā)語(yǔ)言排行榜的最新統(tǒng)計(jì)來(lái)看,C#位居第六成為開(kāi)發(fā)語(yǔ)言市場(chǎng)的頂級(jí)產(chǎn)品:
表 1 TIOBE開(kāi)發(fā)語(yǔ)言排行榜
(注:此為2008年12月的TIOBE開(kāi)發(fā)語(yǔ)言排行榜,參考http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)
因此,在我們講解歷史的開(kāi)始,將C#發(fā)展歷史中的里程碑作以標(biāo)記,來(lái)感受一下C# 10年的發(fā)展歷程,為每開(kāi)發(fā)者在心底搭起一座通往未來(lái)的橋梁。
下面我們分別從不同的歷史階段來(lái)了解C#語(yǔ)言的變遷,并討論在每個(gè)變遷的里程碑上值得品味的閃光點(diǎn),并由此為未來(lái)的發(fā)展打一個(gè)基礎(chǔ)。
1.0,從誕生到立足
2000年之夏,微軟大當(dāng)家--——蓋茨先生著手戰(zhàn)略調(diào)整,微軟大刀闊斧的進(jìn)行了技術(shù)改革與創(chuàng)新,并由此為世界帶來(lái)一個(gè)新的名詞,這就是.NET。那么什么是.NET呢?在.NET這一概念誕生之初,這一概念連微軟本身都充滿了定位的錯(cuò)亂和迷茫,以至于一時(shí)之間處處皆為.NET,大有一統(tǒng)江湖之勢(shì)。隨著.NET平臺(tái)的逐漸完善,概念和定位上的混亂已經(jīng)日漸清晰,作為這場(chǎng)變革中的一項(xiàng)重要內(nèi)容,一種全新的、能夠適應(yīng).NET平臺(tái)特性的高級(jí)語(yǔ)言C#也隨之誕生。這一任務(wù)理所當(dāng)然的落在了Anders Hejlsberg的身上,作為Delphi之父,大師級(jí)的Anders從1998年11月開(kāi)始領(lǐng)導(dǎo)了他的小組為這個(gè)世界帶來(lái)全新的語(yǔ)言寵兒,這就是:C#。
初出茅廬的C#,就像羞羞答答的小姑娘,步步留心、時(shí)時(shí)在意,學(xué)著他人的模樣,生怕在前輩面前丟臉。當(dāng)她以全新的姿態(tài)出現(xiàn)在萬(wàn)千程序開(kāi)發(fā)者眼前時(shí),其兼取百家之長(zhǎng)、優(yōu)雅簡(jiǎn)潔之態(tài)、摒棄復(fù)雜之弊的特性,立時(shí)令所有的觀望折服。在迎來(lái)所有目光的關(guān)注的同時(shí),迅速成為高級(jí)語(yǔ)言戰(zhàn)場(chǎng)的驕子。
那么,C#誕生之初兼取百家之長(zhǎng),具體都有哪些優(yōu)秀品質(zhì)呢,總結(jié)起來(lái)主要體現(xiàn)在兩個(gè)方面包括:
- 面向?qū)ο缶幊獭#實(shí)現(xiàn)對(duì)屬性、事件、委托、方法、索引器、構(gòu)造器的全面支持,為面向?qū)ο蟮姆庋b、繼承、多態(tài)和接口提供了語(yǔ)言級(jí)別的支持。以繼承為例,c#支持單實(shí)現(xiàn)繼承和多接口繼承,摒棄了C++中多繼承帶來(lái)的復(fù)雜性。
- 跨平臺(tái)運(yùn)行時(shí)支持。CLR是.NET平臺(tái)下應(yīng)用程序的通用語(yǔ)言運(yùn)行時(shí),是C#程序賴以生存的跨平臺(tái)環(huán)境,因此C#具有了.NET平臺(tái)語(yǔ)言的所有優(yōu)勢(shì),通用類型系統(tǒng)、自動(dòng)內(nèi)存管理、統(tǒng)一異常處理、完全的FCL訪問(wèn)權(quán),都成為C#無(wú)與倫比的優(yōu)勢(shì)所在。
2.0,變革之作
C# 2.0是一次完善和補(bǔ)充,也是一次變革與重生。在2.0中引入了諸多的語(yǔ)言特性,完善了1.0基礎(chǔ)上的某些不足,例如匿名方法將代碼放在委托而無(wú)需創(chuàng)建新的方法;可空類型實(shí)現(xiàn)了對(duì)值類型的null操作;而部分類將一個(gè)類分解到多個(gè)類文件中。這些補(bǔ)充和完善, 總結(jié)起來(lái)主要包括:
- 匿名方法
- 可空類型
- 部分類
- 迭代器
- 泛型
其中,泛型支持是C# 2.0的重中之重,.NET框架從CLR級(jí)別實(shí)現(xiàn)了對(duì)泛型的支持,提供專門的IL指令支持泛型操作,同時(shí)配合C#語(yǔ)言機(jī)制構(gòu)造一種全新的編程結(jié)構(gòu),實(shí)現(xiàn)了對(duì)類型抽象化的通用處理方式,這就是算法重用。
以最簡(jiǎn)單的交換數(shù)據(jù)為例,我們來(lái)了解泛型帶來(lái)的好處:
// Release : code01, 2009/05/07 // Author : Anytao, http://www.anytao.com public static void Swap(ref int x, ref int y) {int temp = x;x = y;y = temp; }public static void Swap(ref string str1, ref string str2) {string temp = str1;str1 = str2;str2 = temp; }以上兩種算法分別實(shí)現(xiàn)了對(duì)整型、字符串型數(shù)據(jù)的交換,在泛型引入之前實(shí)現(xiàn)相同的交換算法需要分別為所有的類型構(gòu)建相似的處理邏輯,這顯然是一種代碼上的浪費(fèi),而泛型特性徹底解決了這一問(wèn)題:
// Release : code02, 2009/05/07 // Author : Anytao, http://www.anytao.com public static void Swap<T>(ref T t1, ref T t2) {T temp = t1;t1 = t2;t2 = temp; }對(duì)于不同的類型,在運(yùn)行時(shí)以實(shí)際類型對(duì)T占位符進(jìn)行替換,并轉(zhuǎn)換為本地代碼,徹底實(shí)現(xiàn)了靈活的類型抽象和算法重用。同時(shí),除了代碼級(jí)別的重用好處,泛型解決了類型轉(zhuǎn)換、裝箱與拆箱、類型安全等諸多問(wèn)題,為程序設(shè)計(jì)帶來(lái)巨大的變革。
3.0,涅槃與重生
C# 3.0是語(yǔ)言發(fā)展歷史上的里程碑變革,就像鳳凰涅槃一般為C#語(yǔ)言注入強(qiáng)大編程體驗(yàn)和活力,簡(jiǎn)潔、干凈、富有意義,這些特性中主要包括:
- 匿名類型
- 自動(dòng)屬性
- 對(duì)象初始化器
- 集合初始化器
- 隱式類型變量和隱式類型數(shù)組
- 擴(kuò)展方法
- 查詢表達(dá)式
除此之外,C# 3.0的最大亮點(diǎn)就是LINQ(Language Integrated Query,語(yǔ)言集成查詢),在CLR中集成類似于SQL式的數(shù)據(jù)查詢能力,一種前所未有的函數(shù)式編程體驗(yàn)在面向?qū)ο笳Z(yǔ)言中得以大展拳腳,這不得不說(shuō)是C#帶來(lái)的超酷體驗(yàn)。
因?yàn)?#xff0c;本文并非一本講述編程的教科書(shū),所以我們無(wú)法在有限的篇幅來(lái)展現(xiàn)優(yōu)雅的代碼,只能取一瓢飲之,并通過(guò)簡(jiǎn)要的對(duì)比來(lái)領(lǐng)略3.0中的強(qiáng)大功能。以對(duì)象初始化器為例,在2.0時(shí)初始化對(duì)象成員,我們以這種方式實(shí)現(xiàn):
User user = new User(); user.Name = "小王"; user.Age = 28;在3.0中,實(shí)現(xiàn)對(duì)象初始化有了更好的解決方案,由對(duì)象初始化器來(lái)完成:
User user = new User { Name = "小王", Age = 28 };同樣的方式可以用來(lái)實(shí)現(xiàn)集合的初始化和隱式類型的初始化等。
接著,我們?cè)賮?lái)了解一下自動(dòng)屬性帶來(lái)的語(yǔ)法魅力,在3.0之前進(jìn)行屬性封裝的是一件麻煩的事情,例如:
// Release : code03, 2009/05/07 // Author : Anytao, http://www.anytao.com class User {private string name;public string Name{get { return name; }}private int age;public int Age{get { return age; }set { age = value; }} }而自動(dòng)屬性將這一切化簡(jiǎn)為無(wú)形,語(yǔ)法簡(jiǎn)單而功能依舊:
// Release : code04, 2009/05/07 // Author : Anytao, http://www.anytao.com public class User {public string Name { get; set; }public int Age { get; set; } }這些所有的新特性最終都為了一個(gè)共同的目標(biāo)而鋪墊,這就是C# 3.0中最重量級(jí)的新特性:LINQ。所以,本文也不能少了對(duì)LINQ的討論,在代碼級(jí)別實(shí)現(xiàn)類似于SQL式的查詢語(yǔ)法,以類型安全的通用方式完成增、刪、改、查等數(shù)據(jù)操作的基本方式。只要數(shù)據(jù)源基于IEnumerable<T>接口而實(shí)現(xiàn),那么不管是關(guān)系型數(shù)據(jù)、內(nèi)存中集合還是XML都可以作為L(zhǎng)INQ查詢對(duì)象進(jìn)行數(shù)據(jù)處理,這為面向?qū)ο笳Z(yǔ)言實(shí)現(xiàn)函數(shù)式的編程體驗(yàn)創(chuàng)造了條件,一種全新的編程風(fēng)格為編程體驗(yàn)刮來(lái)一股旋風(fēng):
// Release : code05, 2009/05/07 // Author : Anytao, http://www.anytao.com public static void Main() {List<User> users = new List<User>{new User{Name = "小王", Age = 27},new User{Name = "小張", Age = 29},new User{Name = "小李", Age = 23}};IEnumerable<User> result = from user in userswhere user.Age < 30orderby user.Age descendingselect user;foreach (var user in result){//執(zhí)行操作} }你看,這種體驗(yàn)果然非同凡響,優(yōu)雅而簡(jiǎn)單沒(méi)有辜負(fù)Anders對(duì)于代碼美學(xué)的追求。而作為編程用戶,我們同樣體味了這種理念在功能和結(jié)構(gòu)上的雙重精彩。
?
參考文獻(xiàn)
(Web)http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
(Web)http://weblogs.asp.net/podwysocki/archive/2008/05/24/what-is-the-future-of-c-anyways.aspx
(Web)New features in C# 4.0
(Web)http://msdn.microsoft.com/en-us/magazine/cc163340.aspx
作者簡(jiǎn)介:
王濤,網(wǎng)名Anytao,微軟C# MVP,高級(jí)軟件工程師,機(jī)械工程碩士,《你必須知道的.NET》一書(shū)作者,主要研究方向?yàn)?NET底層架構(gòu)和企業(yè)級(jí)系統(tǒng)應(yīng)用。現(xiàn)就職于某軟件公司負(fù)責(zé)架構(gòu)設(shè)計(jì)、軟件開(kāi)發(fā)和項(xiàng)目管理方面的工作。作者對(duì).NET基礎(chǔ)架構(gòu)和CLR底層運(yùn)行機(jī)制有濃厚的研究興趣和造詣,熟悉ASP.NET、XML、WCF、SQL Server相關(guān)技術(shù),對(duì)面向?qū)ο蟆⒃O(shè)計(jì)模式和軟件架構(gòu)有一定的研究與實(shí)踐經(jīng)驗(yàn)。他的聯(lián)系方式如下:http://www.cnblogs.com/Anytao
?
總結(jié)
以上是生活随笔為你收集整理的[你必须知道的.NET]第二十九回:.NET十年(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 新东方一周封神!直播间粉丝破千万 股价涨
- 下一篇: .NET 实现并行的几种方式(二)