天天看點

《C#初學者指南》一導讀

《C#初學者指南》一導讀

歡迎閱讀本書。

c#(讀作“c sharp”)是一種易學的、成熟的程式設計語言。同時,它也是.net framework 的一部分。.net framework是很大的一個技術集合,它包羅萬象,以至于初學者往往不知從何入手。如果你也是一名初學者,那麼本書非常适合你,因為本書就是專門為.net初學者所編寫的教程。

作為初學者的教程,本書并不會介紹.net framework中的每一種技術。相反,本書涵蓋c#和.net framework 語言中最重要的主題,掌握了這些内容,你才能夠自學其他的技術。但是本書的内容很全面,在完全了解各章的内容後,你就能很好地完成中級c#程式員的日常任務。

本書介紹了以下三個主題,它們是專業的c#程式員必須要掌握的。

c#程式語言

c#的面向對象程式設計(object-oriented programming,oop)

.net framework類庫

設計一門高效的c#課程,其困難之處就在于,這三個主題實際上是彼此相關的。一方面,c#就是oop語言,是以如果你已經了解oop,那麼學習c#的文法就較容易。另一方面,諸如繼承、多态、資料封裝等oop的特性,我們最好是用真實案例來講解。可是,了解真正的c#程式,卻需要我們具有.net framework類庫的知識。

因為這三個主題互相依賴,是以我們不能把它們劃分為三個獨立的部分。相反,讨論一個主題的章節會和讨論另一個主題的章節交織在一起。例如,在介紹多态之前,本書要確定我們已經熟悉某些.net framework的類,以便能給出真實的案例。另外,如果不能很好地了解一組特定的類,我們就很難了解泛型這樣的語言特性,而這組特定的類又是在讨論完支援類後才介紹的。

本書中也會有一個主題在兩三個地方重複出現的情況。例如,for和while循環語句是一個基本的語言特性,應該在前邊的章節中介紹它。用foreach循環周遊一個數組或集合,卻隻能在介紹過數組和集合類型後再講解。是以,循環語句首先會出現在第3章,然後在第5章介紹數組和第13章介紹集合時,會再次出現。

本前言接下來的内容會給出.net framework的進階概述、oop的介紹、每章的簡單介紹以及.net framework的安裝指南。

.net framework概述

.net framework是一種程式設計環境的常用名稱,其規範的叫法為通用語言基礎架構(common language infrastructure,cli)。cli是微軟開發的并且通過了iso和ecma的認證标準。iso和ecma都是國際标準化機構。

.net framework引人注目的地方之一,就是支援多種程式設計語言。實際上,最新的統計結果表明,有超過30種語言可以使用.net framework,包括visual basic、c#和c++。這就意味着,如果習慣于使用visual basic,可以繼續用這種語言程式設計。如果你是一名c++程式員,也不必為了充分利用.net framework所提供的優勢而去學習一種新的語言。

但是,多語言支援并不是.net framework的唯一特性。它還提供了一整套技術,使軟體開發更迅速且應用程式更加健壯和安全。多年來,.net framework成為首選的技術,因為它具有以下優點。

跨語言內建

易用性

平台獨立性

一個可以加速應用程式開發的龐大的類庫

安全性

可擴充性

廣泛的行業支援

.net framework不像傳統的程式設計環境。在傳統的程式設計中,源代碼要編譯成可執行代碼。這個可執行代碼對于目标平台來說是本地的,因為它隻能在原計劃運作的平台上運作。換句話說,在windows上編寫和編譯的代碼,隻能在windows上運作;在linux上編寫的代碼,隻能在linux上運作,依次類推,如圖i-1所示。

《C#初學者指南》一導讀

相反,.net framework程式則編譯成通用中間語言(common intermediate language,cil,讀作“sil”或“kil”)代碼。如果你熟悉java,cil代碼相當于java的位元組碼。cil代碼此前叫作微軟中間語言(microsoft intermediate language)或msil代碼,隻能運作在公共語言運作時(common language runtime,clr)上。clr是解釋cil代碼的一個本地應用程式。因為clr可用于多個平台,同樣的cil代碼也變成了跨平台的代碼。如圖i-2所示,我們可以用支援的任何語言編寫一個.net程式并且把它編譯成cil代碼。同樣cil代碼可以運作在任意已經開發了clr的作業系統上。除了cil代碼以外,.net編譯器還生成了中繼資料以描述cil代碼中的類型。這個中繼資料在術語上叫作清單(manifest)。把cil代碼和相應的清單一起打包成一個.dll或.exe檔案,叫作程式集。

《C#初學者指南》一導讀

.net術語中把隻能在clr之上運作的代碼稱為托管代碼(managed code)。另一方面,一些.net語言,諸如c#和c++,既可以生成托管代碼又可以生成非托管代碼。非托管代碼運作在運作時之外。本書隻介紹托管代碼。

當用c#或其他.net語言程式設計時,我們總是使用通用類型系統(common type system,cts)來工作。在解釋cts前,我們要确定你已經了解了什麼是類型。那麼,什麼是類型呢?在計算機程式設計中,類型決定了值的種類,例如一個數字或一段文本。對于編譯器來說,類型資訊特别有用。例如,它使得的32這個乘法運算有意義,因為3和2都是數字。但是,我們如果在c#代碼中寫下vb c#,編譯器将認為它無效,因為不能把兩段文本相乘,至少,在c#中不允許這樣做。

cts中有5種類型。

結構

枚舉

接口

委托

在本書中,我們會逐一介紹這些類型。

oop通過對真實世界中的對象模組化應用來工作。oop有三種主要特性:封裝、繼承和多态。

oop的好處是很實際的。這也是為什麼包括c#在内的大部分現代程式設計語言都是oo的。我們甚至可以引用為了支援oop而進行語言轉換的兩個著名的例子:c語言演變成了c++,而visual basic則更新為visual basic.net。

本節介紹oop的好處并且對學習oop的難易程度給出一個評估。

oop的優點包括代碼易維護、代碼可複用和可擴充性。下面,我們對這些優點作更詳盡的介紹。

1.易維護

目前的應用軟體往往非常大。很久以前,一個“大”系統包含幾千行代碼。而現在,甚至100萬行代碼都不算是大系統。當系統變得更大的時候,就開始産生一些問題。c++之父bjarne stroustrup曾經說過類似于下面的話。小程式可以随便寫,即使不是很容易,但最終你還是能讓它工作。但是,大程式卻截然不同。如果你沒有使用“好的程式設計”技術,新的錯誤會随着你修正老錯誤的步伐而不斷地産生。

原因就在于,一個大程式的不同部分會互相影響。當我們修改程式的某一部分内容時,可能不會意識到這種變化可能會影響到其他部分。oop使應用程式更容易子產品化,而且子產品化使得維護不再頭疼。子產品化在oop中是内在的,因為類(它是對象的模闆)本身就是一個子產品。好的設計應該允許一個類包含相似的功能和相關的資料。在oop中,一個經常用到的重要的相關術語是耦合,它表示兩個子產品之間有一定程度的互動。各部分之間的松耦合使得代碼更容易實作複用,而複用是oop的另一個優點。

2.可複用性

可複用性意味着,如果對于最初編寫的代碼有相同的功能需求,那麼代碼的編寫者或其他人可以複用它們。一種oop語言通常帶有一套現成的庫,這并不奇怪。以c#為例,這門語言是.net framework的一部分,它提供了一套詳細設計并經過測試的類庫。編寫和釋出自己的庫也很容易。程式設計平台中對可複用性的支援是非常吸引人的,因為它會縮短開發時間。

類的可複用性的最大挑戰之一就是為類庫建立好的文檔。程式員如何才能快速地找到提供了他(或她)想要的功能的那個類?找到這樣一個類會比從頭編寫一個新的類更快嗎?好在,.net framework類庫有大量的文檔。

可複用性不僅适用于編碼階段類或其他類型的複用,當我們在oo系統中設計一個應用時,oo設計問題的解決方案也可以複用。這些解決方案叫作設計模式。為了更容易地指明每一種解決方案,人們給每種模式都起了一個名稱。在經典的設計模式圖書《design patterns:elements of reusable object-oriented software》中,我們可以找到可複用的設計模式的最早的名錄,該書作者是erich gamma、richard helm、ralph johnson和john vlissides。

3.可擴充性

每個應用都是獨一無二的,都有自己的需求和規格。說到可複用性,有時我們無法找到一個已有的類能夠提供應用程式所需的确切功能。但是,我們可能會找到一個或兩個類,它們提供了這些功能的一部分。可擴充性意味着,我們仍然可以使用這些類,通過擴充它們來滿足我們的需求。我們還節省了時間,因為不需要從頭編寫代碼。

在oop中,可擴充性通過繼承來實作。我們可以擴充一個已有的類,為它添加一些方法或資料,或者修改不喜歡的方法行為。如果知道該基本功能會在許多示例中使用,但是又不希望類提供非常具體的功能,那麼我們可以提供一個通用的類,以後可以擴充它來為應用程式提供具體的功能。

c#程式員需要熟練掌握oop。如果你曾經使用過過程式語言,諸如c或pascal,你會發現有很大的不同。鑒于此,這既是好消息又是壞消息。

我們先說壞消息。

研究人員一直針對在學校教授oop的最好的方式而争論不休。有些人認為,最好的方法是在介紹oop前先教授過程式語言。我們發現,在許多學校,oop課程往往安排在接近大學最後1年。

但是,最新的研究表明,擁有過程式程式設計技能的人和oo程式員的視角以及解決問題的模式差異迥然。當熟悉過程式程式設計的人需要學習oop時,他所面臨的最大障礙就是模式的轉變。據說,從過程式轉變到面向對象模式,這種觀念的轉變需要6~18個月的時間。其他的研究也表明,沒有學習過過程式程式設計的學生,不會覺得oop很難。

我們再來說好消息。

c #是學習oop的最簡單的語言之一。例如,我們不需要擔心指針,也不需要花費寶貴的時間去解決由于沒有釋放不用的對象而引起的記憶體洩漏的問題。最重要的是,.net framework有一個非常廣泛的類庫,在其早期的版本中,bug相對來說很少。一旦我們掌握了oop的基本要點,用c#程式設計是很容易的。

第2章 語言基礎

第3章 語句

第4章 對象與類

第5章 核心類

第6章 繼承

第7章 結構

第8章 錯誤處理

第9章 數字和日期

第10章 接口和抽象類

第11章 枚舉

第12章 泛型

第13章 集合

第14章 輸入輸出

第15章 wpf

第16章 多态

第17章 ado.net

附錄a visual studio express 2012 for windows desktop

附錄b visual c# 2010 express

附錄c sql server 2012 express