Learning hard C#学习笔记 C#简介
第 1 章 你真的了解C#嗎
在正式介紹C#的語法和特性之前,讓我們首先來了解下它的發展歷程。因為只有知道了C#的概貌和由來,積累了必要的背景知識,我們才能更好地掌握C#,進而使用C#來編程。
1.1 什么是C#
C#(發音為C Sharp)是由微軟公司開發的一種面向對象且運行于.NET Framework之上的高級程序設計語言。它的基本語法與C和C++類似,但相比較而言,C#更加簡單易學。如果你之前已經對上述的任何一種語言有所了解,就可以通過學習,在很短的時間里使用C#來編程。
C#還具有很多特性,例如封裝方法簽名的委托(類似于C++中的方法指針)、可為空的值類型、泛型方法和Lambda表達式等,這些特性都是其他語言所不具有的。C# 2.0支持泛型類型,從而避免了強制類型轉換帶來的性能損失;還提供了迭代器,因此可更簡單地為集合類型實現自定義的迭代行為。在C# 3.0中,語言集成查詢(LINQ)表達式使查詢操作更為簡單。C# 4.0中提供的動態類型,可以讓開發者為類型實現自定義的動態行為,從而使在C#這樣的靜態語言中調用諸如Python的動態語言成為可能。
使用C#開發應用程序也比使用其他語言更簡單、快速,因為C#語言是基于.NET Framework的。.NET Framework為開發應用程序提供了豐富的類庫和圖形控件,利用這些現有的控件就可以開發出一些應用程序。而且,C#的開發工具Visual Studio也提供了很多應用程序的模塊,我們可以利用模塊快速創建應用程序。
1.1.1 C#語言的發展歷程
了解C#語言的發展歷程具有重要的意義,因為只有當你知道了C#語言所具有的特性,才能更好地學習和掌握它們。
C#是微軟公司在2000年6月發布的全新編程語言。在其誕生后的14年里,為了幫助開發人員更好地使用C#語言來編寫應用程序,微軟不斷地更新C#語言的版本,每次升級都能帶來讓我們眼前一亮的新特性。表1-1列出了C#每個版本中所更新的特性和對應的.NET Framework版本。
表 1-1 C#各版本的新特性及對應的.NET Framework版本
| C# 1.0 | .NET Framework 1.0 | Visual Studio .NET 2002 | 2002.1 | 委托事件 |
| C# 1.1 | .NET Framework 1.1 | Visual Studio .NET 2003 | 2003.4 | APM |
| C# 2.0 | .NET Framework 2.0 | Visual Studio 2005(開始命名為Visual Studio) | 2005.11 | 泛型 |
| C# 3.0 | .NET Framework 3.0 | Visual Studio 2008 | 2007.11 | 隱式類型的局部變量 |
| C# 4.0 | .NET Framework 4.0 | Visual Studio 2010 | 2010.4 | 動態綁定 |
| C# 5.0 | .NET Framework 4.5 | Visual Studio 2012 | 2012.8 | 異步和等待調用方信息 |
從表1-1可以看出,對于C#的每一個版本,微軟都是圍繞某個主題進行更新的,圖1-1更形象地總結了每個C#版本的主題。
圖 1-1
1.1.2 C#能編寫哪些應用程序
對于讀者來說,最想達到的效果莫過于學完C#之后能立刻去開發應用程序。可以這么說,只要掌握了C#,你就能編寫所看到的任何應用程序了,比如音樂播放器、電子商務平臺,以及一些服務程序等。下面就介紹幾種常見的應用程序類型。
1. Windows桌面應用程序
用C#實現Windows桌面應用程序較其他語言來說更為簡單快速。主要原因在于,Windows Forms模塊提供了一個強大的控件庫,其中包含按鈕、菜單等常用控件,用戶可使用這些控件,通過拖拉的方式輕松地建立Windows用戶界面。
另一方面,C#開發環境Visual Studio也很好地集成了Windows Forms模塊,方便我們創建這類應用程序;而在.NET 3.0之后(對應于Visual Studio 2008),我們還可以使用Windows Presentation Foundation(WPF)來實現Windows桌面應用程序,WPF提供了更大的靈活性和更漂亮的外觀,如圖1-2所示。
圖 1-2
2. Web應用程序
Web應用程序就是一些Web頁面,通過瀏覽器可以查看這些Web頁面。.NET Framework提供了ASP.NET技術來幫助我們實現該類應用程序。ASP.NET模塊中包含豐富的控件庫,我們可以利用這個控件庫來制作出漂亮的Web頁面。此外,Visual Studio也集成了該類應用程序的模板(如圖1-3所示),使用模板來建立Web應用程序速度更快。
圖 1-3
3. Web服務
Web服務是實現分布式應用程序的一種方式。這里舉一個生活中的例子,幫助大家理解什么是服務:我們去飯店吃飯,就會有服務員來為我們服務點單。可以發現,服務即指我們不想自己去做,而希望別人幫助我們完成某件事情。
在開發過程中,我們也需要實現那些為其他應用程序提供服務的程序,C#語言可以幫助我們實現這類應用程序。在.NET Framework 3.0之后,微軟提供了Windows Communication Foundation(WCF)技術來實現Web服務,Visual Studio中也集成了該應用程序的模板(如圖1-4所示)。
圖 1-4
C#可以實現任何類型的應用程序,上面只是簡單介紹了其中最常見的3類應用程序。對于上面介紹的3種具體的技術,本書不會多作介紹,請讀者朋友們參考相關圖書和資料進行學習。
1.2 什么是.NET Framework
在前面的介紹中,.NET Framework這個詞已經出現過多次了,然而它到底是什么呢?
我們可以這樣去理解.NET Framework(.NET框架):C#是一門編程語言,它用于實現與計算機的對話,但C#編寫的程序是需要編譯和運行的,.NET Framework就是應用程序運行時的執行環境,為應用程序的執行提供以下幾種服務。
-
全面的類庫 .NET Framework提供了豐富的類庫以供調用,這使我們不必再去編寫大量代碼去處理常見的操作。
-
內存管理 在許多其他的編程語言中,開發人員需要負責內存的分配和釋放,以及對象生命周期的處理等任務。.NET Framework為了減輕開發人員的工作,提供了內存管理服務。
-
通用類型系統(Common Type System,CTS) CTS定義了可以在中間語言中使用的預定義數據類型。
-
開發結構和技術 .NET Framework提供了開發特定應用程序所需的庫,如Web應用程序的ASP.NET技術。
-
語言互操作性 面向.NET Framework的語言編譯器都提供了生成中間語言代碼的機制,這種機制使得不同語言之間進行互操作成為可能。
1.2.1 .NET Framework的組成
前面簡單介紹了.NET Framework的概念,接下來,讓我們看看.NET Framework具體是由哪幾部分組成的。
.NET Framework包括公共語言運行時(Common Language Runtime,CLR)和.NET Framework類庫(Framework Class Library,FCL)。
1. 公共語言運行時
公共語言運行時是.NET Framework的核心基礎。我們可以將CLR看成一個在執行時管理代碼的代理,它提供了內存管理、線程管理和異常處理等服務,而且還負責對代碼實施嚴格的類型安全檢查,保證了代碼的正確性。我們將受CLR管理的代碼稱為托管代碼(managed code),將不受CLR管理的代碼稱為非托管代碼(unmanaged code)。
CLR包含兩個組成部分:通用類型系統(Common Type System,CTS)和公共語言規范(Common Language Specification,CLS)。下面來具體了解這兩個組件的功能。
-
CTS
C#和VB.NET都是由CLR進行管理的,但是它們的語法和數據類型各不相同,CLR是如何對這兩種不同的語言進行托管的呢?
這得益于CTS。CTS用于解決不同語言之間數據類型不同的問題,如C#中整型是int,而VB.NET中的整型卻是Integer,通過CTS可以把這兩個類型變成通用類型Int32。所有.NET語言都共享CTS這一類型系統,從而使它們之間能夠實現無縫互操作。
CTS類型主要分為兩大類:引用類型和值類型。如圖1-5所示,這兩種類型之間存在著相互轉化,轉化方法分別為裝箱(box)和拆箱(unbox)。更多有關兩類CTS類型轉換的內容將在第10章中介紹。
圖 1-5
-
CLS
.NET下的語言不僅僅存在數據類型的不同,語言規范上也有顯著的區別,公共語言規范(CLS)就是為了解決這個問題而誕生的。
CLS是一種最低的語言標準,它制定了以.NET平臺為目標的語言所必須支持的最小特征,以及某一語言與其他.NET語言之間實現互操作所需要的完備特征。凡是遵守這個標準的語言,在.NET框架下都可以實現互相調用;不符合公共語言規范的代碼就不能被其他語言調用,繼而不能與其他語言進行互操作。
比如在C#中,變量命名是區分大小寫的,而VB.NET卻不區分大小寫,這樣CLS就規定,編譯后的IL代碼除了大小寫之外必須還有其他的不同。圖1-6很好地演示了兩者之間的區別。
圖 1-6
2. .NET Framework
.NET Framework類庫就是一組DLL程序集的集合,其中包含了大量定義好的類型,這些類型都公開了一些功能。我們可以使用這些公開的功能開發出多種應用程序,例如前面介紹的Windows Forms和ASP.NET應用程序。
由于FCL中包含了數量極多的類型,因此有必要將相關的一組類型放到一個單獨的命名空間中加以區分,例如System.IO命名空間中就包含了用于執行I/O操作的類型。因此,在使用FCL中某個類時,還必須知道該類所在的命名空間。
圖1-7可以幫助大家更好地理解公共語言運行時、類庫與應用程序之間以及與整個操作系統之間的關系。
圖 1-7
1.2.2 C#與.NET Framework的關系
C#是面向.NET Framework的語言,除了C#之外,VB.NET和F#也都是面向.NET Framework的語言。.NET Framework為這些語言提供了執行環境,這些語言則可以調用.NET Framework所提供的類庫來開發各種應用程序。大家可以通過圖1-8更好地理解兩者之間的關系。
圖 1-8
1.2.3 C#代碼的執行過程
在Visual Studio開發工具下,我們只需要按F5就可以編譯和執行C#代碼了,但是C#代碼到底是如何執行的呢?為了使C#代碼能夠運行,必須將其轉換為目標操作系統能夠理解的語言,即本機代碼(native code)。在.NET Framework平臺下,該過程包括兩個階段。
-
C#代碼編譯為中間語言代碼的階段——在編譯C#代碼時,并不是立即創建專用于操作系統的本機代碼,而是由C#編譯器(Visual Studio中集成了C#編譯器)把代碼編譯為通用中間語言(Common Intermediate Language,CIL)代碼。
-
中間語言代碼編譯為本機代碼的階段——要使C#代碼能夠運行,還需進一步將CIL代碼轉換為特定CPU的本機代碼,該過程由即時編譯器(Just-In-Time,JIT)來完成。
下面詳細介紹C#代碼的編譯和執行過程。
1. C#代碼編譯為中間語言代碼階段
并不是只有C#代碼才能被編譯為中間語言代碼,其他面向.NET的語言(如VB .NET)在執行之前也都需要先編譯為中間語言代碼。該過程由對應的編譯器去完成,具體過程如圖1-9所示。
最終創建的IL代碼將存儲在一個程序集中,程序集中除IL代碼外,還將包括元數據和可選的資源文件。元數據用來描述代碼中的類型,這種描述針對3個方面:類型定義的描述、類型成員的描述和類型引用成員的描述。可選的資源文件指IL代碼中使用的其他數據,如圖片文件等。
圖 1-9
程序集分為兩種:擴展名為.exe的可執行文件,以及擴展名為.dll的可供其他程序調用的庫文件。
2. 中間語言代碼編譯為本機代碼階段
為了使IL代碼能夠運行,必須把它編譯為本機代碼,即CPU指令。這個過程由CLR的JIT編譯器來完成。其編譯過程如圖1-10所示。
圖 1-10
3. 執行本機代碼
JIT編譯生成本機代碼之后,編譯好的本機代碼會被放置到一個緩沖區中緩存,下次再調用相同的代碼時,可直接運行緩沖區中現有的本機代碼,從而避免重新驗證IL代碼以及把它編譯為本機代碼的過程。使用這種方法,系統只在首次調用時才會造成一些性能損失(即發生JIT過程)。
1.3 歸納總結
本章簡單介紹了C#語言的特點和發展歷程,闡釋了.NET Framework與C#之間的關系,并給出了C#代碼的執行過程。相信通過本章的學習,你已經對C#有了一個全面的認識。下一章將帶領大家創建一個簡單的控制臺程序。
?
from:?http://www.ituring.com.cn/book/tupubarticle/9043
總結
以上是生活随笔為你收集整理的Learning hard C#学习笔记 C#简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql截取字符串函数left和rig
- 下一篇: Learning hard C#学习笔记