c#程式設計

c#程式設計

c#程式設計》是2010年清華大學出版社出版的圖書,作者是孫踐知。該書可作為高等院校計算機相關專業學生的教材,也可作為初、中級讀者和培訓班學員學習的參考用書。

基本介紹

  • 書名:c#程式設計
  • 作者:孫踐知
  • 出版社清華大學出版社
  • 出版時間:2010年11月1日
2010年清華大學出版社出版的圖書,內容簡介,書籍目錄,微軟開發語言,發展歷程,語言特點,主要區別,C#的前途,

2010年清華大學出版社出版的圖書

內容簡介

《C#程式設計》將C#程式設計必須掌握的知識歸納為若干案例,每個案例解決一個問題。初學者只需模仿案例,獲得直接體驗,然後再學習和案例直接相關的知識。通過一個單元接著一個單元的模仿、學習,逐步地構成完整的知識體系。
全書共分為12章,主要包括C#概述及開發環境,C#語言基礎,分支結構,循環結構,面向對象的基本概念,多態、事件和接口,數組和集合,net類庫,檔案和流,用戶界面設計,adonet和資料庫,以及異常處理等內容。
《C#程式設計》在選用軟體版本時進行了折中,目前最新版本是Visual studionet 2010 beta版,考慮到beta版軟體可能存在問題,《C#程式設計》採用了visual studionet 2008作為開發環境。
《C#程式設計》適合作為高等院校C#程式設計課程教材,書中涉及了大量的最新C#程式設計技術,也可作為程式開發人員的參考書。
C#是微軟公司推出的新一代程式語言。它在c++的基礎之上重新打造,成為一門全新的完全面向對象的程式設計語言,能夠提供更高的可靠性和安全性,不僅能用於開發傳統的控制台應用程式和windows應用程式,還可用於開發web應用程式、silverlight動畫和xna遊戲。
全書共14章,分為兩部分,第1部分為c#基礎,共8章,重點介紹了c#的基本語法、面向對象的程式設計方法、基於事件驅動的程式設計方法以及程式的調試和異常處理方法。第2部分共6章,在c#基礎之上,比較全面地展示了c#的各種套用技術,包括windows程式設計技術、資料庫編程技術、檔案操作與編程技術、xml與linq高級數據訪問技術、網路套用編程技術和多媒體編程技術等。本書內容豐富,可操作性強,敘述簡潔流暢,沒有晦澀的術語,所有實例精心設計,能夠幫助讀者輕鬆、愉快地掌握c#的基本語法、編程方法和套用技巧。

書籍目錄

第1章 C#概述及開發環境
第2章C#語言基礎
第3章分支結構
第4章循環結構
第5章面向對象的基本概念
第6章多態、事件和接口
第7章 數組和集合
第8章 net類庫
第9章 檔案和流
第11章 adonet和資料庫
第12章 異常處理
參考文獻

微軟開發語言

發展歷程

1998年,Anders Hejlsberg(Delphi和Turbo Pascal語言的設計者)以及他的微軟開發團隊開始開發C# 的第一個版本。2000年9月,ECMA(國際信息和通信系統司標準化組織)成立了一個任務組,著力為C# 程式語言定義一個Microsoft建議標準。其設計目標是設計“一種簡單、現代、通用、面向對象的程式語言”,於是出台了ECMA-334標準,這是一種令人滿意的簡潔的語言,它有類似於Java的語法,又借鑑了C++和C的風格。

語言特點

中間代碼
微軟在用戶選擇何時MSIL應該編譯成機器碼的時候是留了很大的餘地.微軟公司很小心的聲稱MSIL不是解釋性的,而是被編譯成了機器碼.它也明白許多--如果不是大多數的話--程式設計師認為Java程式要不可避免的比C編寫的任何東西都要慢.而這種實現方式決定了基於MSIL的程式(指的是用C#,Visual Basic,"Managed C++"--C++的一個符合CLS的版本--等語言編寫的程式)將在性能上超過"解釋性的"Java代碼.當然,這一點還需要得到事實證明,因為C#和其他生成MSIL的編譯器還沒有發布.但是Java JIT編譯器的普遍存在使得Java和C#在性能上相對相同.像"C#是編譯語言而Java是解釋性的,"之類的聲明只是商業技巧.Java的中間代碼和MSIL都是中間的彙編形式的語言,它們在運行時或其它的時候被編譯成機器代碼.
命名空間中的申明
當你創建一個程式的時候,你在一個命名空間裡創建了一個或多個類.同在這個命名空間裡(在類的外面)你還有可能聲明接口,枚舉類型和結構體.必須使用using關鍵字來引用其他命名空間的內容.
基本的數據類型
C#擁有比C,C++或者Java更廣泛的數據類型.這些類型是bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double,和decimal.像Java一樣,所有這些類型都有一個固定的大小.又像C和C++一樣,每個數據類型都有有符號和無符號兩種類型.與Java相同的是,一個字元變數包含的是一個16位的Unicode字元.C#新的數據類型是decimal數據類型,對於貨幣數據,它能存放28位10進制數字.
兩個基本類
一個名叫object的類是所有其他類的基類.而一個名叫string的類也像object一樣是這個語言的一部分.作為語言的一部分存在意味著編譯器有可能使用它--無論何時你在程式中寫入一句帶引號的字元串,編譯器會創建一個string對象來保存它.
參數傳遞
方法可以被聲明接受可變數目的參數.預設的參數傳遞方法是對基本數據類型進行值傳遞.ref關鍵字可以用來強迫一個變數通過引用傳遞,這使得一個變數可以接受一個返回值.out關鍵字也能聲明引用傳遞過程,與ref不同的地方是,它指明這個參數並不需要初始值.
與COM的集成
C#對Windows程式最大的賣點可能就是它與COM的無縫集成了,COM就是微軟的Win32組件技術.實際上,最終有可能在任何.NET語言裡編寫COM客戶和伺服器端.C#編寫的類可以子類化一個以存在的COM組件;生成的類也能被作為一個COM組件使用,然後又能使用,比方說,JScript語言子類化它從而得到第三個COM組件.這種現象的結果是導致了一個運行環境的產生,在這個環境裡的組件是網路服務,可以用任何.NET語言子類化.
索引下標
一個索引與屬性除了不使用屬性名來引用類成員而是用一個方括弧中的數字來匿名引用(就像用數組下標一樣)以外是相似的.
public class ListBox: Control
{
private string[] items;
public string this[int index]
{
get
{
return items[index];
}
set
{
items[index] = value;
Repaint();
}
}
}
可以用一個循環器來匿名引用字元串內部數組成員,就像下面這樣:
ListBox listBox = ...;
listBox[0] = "hello";
Console.WriteLine(listBox[0]);
代理和反饋
一個代理對象包括了訪問一個特定對象的特定方法所需的信息.只要把它當成一個聰明的方法指針就行了.代理對象可以被移動到另一個地方,然後可以通過訪問它來對已存在的方法進行類型安全的調用.一個反饋方法是代理的特例.event關鍵字用在將在事件發生的時候被當成代理調用的方法聲明.

主要區別

與JAVA的區別
C#(讀做 "C sharp")是微軟公司在去年六月發布的一種新的程式語言,並定於在微軟職業開發者論壇(PDC)上登台亮相.C#是微軟公司研究員Anders Hejlsberg的最新成果.C#看起來與Java有著驚人的相似;它包括了諸如單一繼承,界面,與Java幾乎同樣的語法,和編譯成中間代碼再運行的過程.但是C#與Java有著明顯的不同,它借鑑了Delphi的一個特點,與COM(組件對象模型)是直接集成的,而且它是微軟公司.NET windows網路框架的主角.
微軟c#語言定義主要是從C和C++繼承而來的,而且語言中的許多元素也反映了這一點.C#在設計者從C++繼承的可選選項方面比Java要廣泛一些(比如說structs),它還增加了自己新的特點(比方說原始碼版本定義).但它還太不成熟,不可能擠垮Java.C#還需要進化成一種開發者能夠接受和採用的語言.而微軟當前為它的這種新語言大造聲勢也是值得注意的.目前大家的反應是:"這是對Java的反擊."
C#更像Java一些,雖然微軟在這個問題上保持沉默.這也是意料中的事情,我覺得,因為Java近來很成功而使用Java的公司都報告說它們在生產效率上比C++獲得了提高。
與C++區別
C++,這個詞在中國大陸的程式設計師圈子中通常被讀做“C加加”,而西方的程式設計師通常讀做“C plus plus”,它是一種使用非常廣泛的計算機程式語言。C++是一種靜態數據類型檢查的,支持多重編程範式的通用程式設計語言。它支持過程式程式設計、數據抽象、面向對象程式設計、泛型程式設計等多種程式設計風格。
貝爾實驗室的本賈尼·史特勞斯特盧普(w:en:Bjarne Stroustrup)博士在20世紀80年代發明並實現了C++(最初這種語言被稱作“C with Classes”)。一開始C++是作為C語言的增強版出現的,從給C語言增加類開始,不斷的增加新特性。虛函式(virtual function)、運算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、RTTI、名字空間(name space)逐漸被加入標準。1998年國際標準組織(ISO)頒布了C++程式設計語言的國際標準ISO/IEC 14882-1998。遺憾的是,由於C++語言過於複雜,以及他經歷了長年的演變,直到現在(2004年)只有少數幾個編譯器完全符合這個標準。
另外,就目前學習C++而言,可以認為他是一門獨立的語言;他並不依賴C語言,我們可以完全不學C語言,而直接學習C++。根據《C++編程思想》(Thinking in C++)一書所評述的,C++與C的效率往往相差在正負5%之間。所以有人認為在大多數場合C++ 完全可以取代C語言。
C++語言發展大概可以分為三個階段:第一階段從80年代到1995年。這一階段C++語言基本上是傳統類型上的面向對象語言,並且憑藉著接近C語言的效率,在工業界使用的開發語言中占據了相當大份額;第二階段從1995年到2000年,這一階段由於標準模板庫(STL)和後來的Boost等程式庫的出現,泛型程式設計在C++中占據了越來越多的比重性。當然,同時由於Java、C#等語言的出現和硬體價格的大規模下降,C++受到了一定的衝擊;第三階段從2000年至今,由於以Loki、MPL等程式庫為代表的產生式編程和模板元編程的出現,C++出現了發展歷史上又一個新的高峰,這些新技術的出現以及和原有技術的融合,使C++已經成為當今主流程式設計語言中最複雜的一員。

C#的前途

這世界上沒有什麼比編程工具更加牽動程式設計師的心。VC、VB、DELPHI、JAVA……這些耀眼的名字不僅占據了程式設計師的生活,而且似乎已經成為了某種信仰。可是,伴隨著新世紀的腳步,這些信仰又一次遭遇了重大的挑戰。微軟,這頭被法官和黑客們折騰得既疲憊又惱怒的獅子,發誓要保住它頭上的王冠,拼盡全力,拿出了看家的本事——.NET戰略。作為 .NET的核心開發語言,C# 順理成章地浮出了水面。程式設計師們也就不得不做出一個痛苦的選擇,跟在誰的後面?要找出答案就不得不作一番比較和預測。筆者作為一個資深的程式設計師,斗膽在此狂言,權作拋磚引玉。
如果拋開一切非技術方面的因素,C# 無疑是這個星球上有史以來最好的程式語言,它幾乎集中了所有關於軟體開發和軟體工程研究的最新成果。面向對象、類型安全、組件技術、自動記憶體管理、跨平台異常處理、版本控制、代碼安全管理……你不可能在另外的一種語言中找到所有這些特性。儘管像很多人注意到的一樣,當我羅列上述特性時,總是讓人想到JAVA,然而C# 確實走得更遠。但現實的情況是,非技術的因素往往更能決定一個產品的未來,尤其在計算機軟體的歷史上,技術卓越的產品,如OS/2、Mac OS、UNIX等,都敗在了Windows那漂亮的臉蛋兒下。而這一次,微軟的角色好像從一個赤手空拳的革命者變成了仗勢欺人的老地主,如果真是要變天,那C# 這孩子豈不是投錯了胎?可能情形並非如此糟糕,畢竟瘦死的駱駝比馬大,而且C# 已經提交給了一個標準化組織,一旦成了國際標準,說不準真有哪個手癢的大俠(也有可能是微軟自己)給移植到Linux 和別的平台上。那樣的話,JAVA可就慘了。因為JAVA的用戶主要是網路服務的開發者和嵌入式設備軟體的開發者,嵌入式設備軟體不是C# 的用武之地,而在網路服務方面,C# 的即時編譯和本地代碼Cache方案比JAVA虛擬機具有絕對的性能優勢。何況C# 一旦成為一個像C++ 一樣的公共的標準,軟體開發商既可以省去JAVA的許可證費用,也不必擔心成為微軟的奴隸,那些反微軟的人士和主張廠商獨立的人士可能也不會有什麼意見。這可能正是微軟所期待的。
如果把C# 和 JAVA 在網路服務領域的爭奪比作未來制空權的爭奪的話,那么C# 和傳統通用快速開發工具——VB、DELPHI等的較量將是地地道道的白刃戰。可能最慘的程式設計師就是VB程式設計師,在微軟,VB就像離任的柯林頓,不但失去了所有的光輝,而且亂事纏身。想想吧,VB6寫的項目必須用轉換工具轉換成基於.NET的代碼才能在VB7中調入,幾乎面目全非。由於VB7遵循為迎合.NET而建立的通用語言規範(CLS),幾乎把所有原來只在C++、JAVA等語言中可以運用的特性統統加了進來,只是語法和原來兼容。如果你是第一次在VB7中看到自己的舊VB6項目轉換之後的代碼,一定要當心你的心臟!所以,努力吧,別告訴我你將就此退休。DELPHI的狀況也好不到哪裡去,原來的看家本領是做起套用來又快又好,可現在看看最新的Beta 1, 你會感到如此熟悉,眾多的屬性列表、組件……誰讓你窮呢,連總設計師都養不住。
其實在程式語言中真正的霸主多年來一直是C++,所有的作業系統和絕大多數的商品軟體都是用C++作為主要開發語言的。JAVA的程式設計師絕大多數也是C++的愛好者,PHP的成功裡面也有類似C++的語法的功勞。在作業系統、設備驅動程式、視頻遊戲等領域,C++在很長的時間內仍將占據主要地位,而在數量最大的套用軟體的開發上,C# 很可能取代C++的位置。首先,C# 和JAVA一樣,簡直就是照搬了C++的部分語法,因此,對於數量眾多的C++程式設計師學習起來很容易上手,另外,對於新手來說,比C++要簡單一些。其次,Windows是目前占壟斷地位的平台,而開發Windows套用,當然微軟的聲音是不能忽略的。最重要的是,相對於C++,用C# 開發套用軟體可以大大縮短開發周期,同時可以利用原來除用戶界面代碼之外的C++代碼。
但是,C# 也有弱點。首先,在一些版本較舊的Windows平台上,C# 的程式還不能運行,因為C# 程式需要 .NET運行庫作為基礎,而 .NET運行庫作為現在的的Windows(XP及以後版本)的一部分發行, Windows Me 和 Windows 2000用戶只能以Service Pack的形式安裝使用。其次,C# 能夠使用的組件或庫還只有 .NET 運行庫等很少的選擇,沒有豐富的第三方軟體庫可用,這需要有一個過程,同時各軟體開發商的支持也很重要。第三,JAVA的成功因素里有一些是反微軟陣營的吹捧,雖然“只寫一次,到處運行”只是一句口號,但畢竟已經是一種成熟的技術。而C# 的鼓吹者目前只有名聲不佳的微軟,且只能運行在Windows上。實際上這兩種語言都不是不可替代的,理智的說,對軟體開發商而言,什麼用的最熟什麼就是最好的工具。尤其對C++的使用者,C# 沒有帶來任何新東西,因為.NET運行庫在C++中也可以使用,沒有要換的絕對的理由。
綜上所述,我個人認為,近幾年,C# 將不可避免地崛起,在Windows平台上成為主角,而JAVA將在UNIX、Linux等平台上成為霸主,C++ 將繼續在系統軟體領域大展拳腳。非常有意思的是,這些語言的語法極其接近,因為JAVA和C# 都是由C++發展而來的。其他的開發工具當然還會在相當長的時間裡繼續他們的旅程,不過在市場份額上,將不可避免地受到衝擊。

相關詞條

熱門詞條

聯絡我們