C#在帶來對應用程序的快速開發能力的同時,並沒有犧牲C與C++程序員所關心的各種特性。它忠實地繼承了C和C++的優點。如果你對C或C++有所了解,你會發現它是那樣的熟悉。即使你是一位新手,C#也不會給你帶來任何其它的麻煩,快速應用程序開發(Rapid Application Development,RAD)的思想與簡潔的語法將會使你迅速成為一名熟練的開發人員。
正如前文所述,C#是專門為.NET應用而開發出的語言。這從根本上保證了C#與.NET框架的完美結合。在.NET運行庫的支持下,.Net框架的各種優點在C#中表現得淋漓盡致。讓我們來看看C#的一些突出的特點,相信在以後的學習過程中,你將會深深體會到“#”--“SHARP”的真正含義。
●簡潔的語法
●精心地面向對象設計
●與Web的緊密結合
●完整的安全性與錯誤處理
●版本處理技術
●靈活性與兼容性
一、簡潔的語法
請原諒,雖然我們一再強調學習本書不需要任何的編程基礎,但在這裡還不得不提到C++。
在缺省的情況下,C#的代碼在.Net框架提供的“可操縱”環境下運行,不允許直接地內存操作。它所帶來的最大的特色是沒有了指針。與此相關的是,那些在C++中被瘋狂使用的操作符(例如:“::”、“->”和“.,”)已經不再出現。C#只支持一個“.”,對於我們來說,現在需要理解的一切僅僅是名字的嵌套而已。
C#用真正的關鍵字換掉了那些把活動模板庫(Active Template Library,ALT)和COM搞得亂糟糟的偽關鍵字,如OLE_COLOR、BOOL、VARIANT_BOOL、DISPID_XXXXX等等。每種C#操作符在.Net類庫中都有了新名字。
語法中的冗余是C++中的常見的問題,比如"const"和"#define"、各種各樣的字符類型等等。C#對此進行了簡化,只保留了常見的形式,而別的冗余形式從它的語法結構中被清除了出去。
二、精心地面向對象設計
也許你會說,從Smalltalk開始,面向對象的話題就始終纏繞著任何一種現代程序設計語言。的確,C#具有面向對象的語言所應有的一切特性:封裝、繼承與多態性,這並不出奇。然而,通過精心地面向對象設計,從高級商業對象到系統級應用,C#建造廣泛組件的絕對選擇。
在C#的類型系統中,每種類型都可以看作一個對象。C#提供了一個叫做裝箱(boxing)與拆箱(unboxing)的機制來完成這種操作,而不給使用者帶來麻煩,這在以後的章節中將進行更為詳細的介紹。
C#只允許單繼承,即一個類不會有多個基類,從而避免了類型定義的混亂。在後面的學習中你很快會發現,C#中沒有了全局函數,沒有了全局變量,也沒有了全局常數。一切的一切,都必須封裝在一個類之中。你的代碼將具有更好的可讀性,並且減少了發生命名沖突的可能。
整個C#的類模型是建立在.NET虛擬對象系統(Visual Object System,VOS)的基礎之上,其對象模型是.Net基礎架構的一部分,而不再是其本身的組成部分。在下面將會談到,這樣做的另一個好處是兼容性。
借助於從VB中得來的豐富的RAD經驗,C#具備了良好的開發環境。結合自身強大的面向對象功能,C#使得開發人員的生產效率得到極大的提高。對於公司而言,軟件開發周期的縮短將能使它們更好應付網絡經濟的競爭。在功能與效率的槓桿上人們終於找到了支點。
三、與Web的緊密結合
.Net中新的應用程序開發模型意味著越來越多的解決方案需要與Web標准相統一,例如超文本標記語言(Hypertext Markup Language,Html)和XML。由於歷史的原因,現存的一些開發工具不能與Web緊密地結合。SOAP的使用使得C#克服了這一缺陷,大規模深層次的分布式開發從此成為可能。
由於有了Web服務框架的幫助,對程序員來說,網絡服務看起來就象是C#的本地對象。程序員們能夠利用他們已有的面向對象的知識與技巧開發Web服務。僅需要使用簡單的C#語言結構,C#組件將能夠方便地為Web服務,並允許它們通過Internet被運行在任何操作系統上的任何語言所調用。舉個例子,XML已經成為網絡中數據結構傳遞的標准,為了提高效率,C#允許直接將XML數據映射成為結構。這樣就可以有效的處理各種數據。
四、完整的安全性與錯誤處理
語言的安全性與錯誤處理能力,是衡量一種語言是否優秀的重要依據。任何人都會犯錯誤,即使是最熟練的程序員也不例外:忘記變量的初始化,對不屬於自己管理范圍的內存空間進行修改,......。這些錯誤常常產生難以預見的後果。一旦這樣的軟件被投入使用,尋找與改正這些簡單錯誤的代價將會是讓人無法承受的。C#的先進設計思想可以消除軟件開發中的許多常見錯誤,並提供了包括類型安全在內的完整的安全性能。為了減少開發中的錯誤,C#會幫助開發者通過更少的代碼完成相同的功能,這不但減輕了編程人員的工作量,同時更有效地避免了錯誤的發生。
.NET運行庫提供了代碼訪問安全特性,它允許管理員和用戶根據代碼的ID來配置安全等級。在缺省情況下,從Internet和Intranet下載的代碼都不允許訪問任何本地文件和資源。比方說,一個在網絡上的共享目錄中運行的程序,如果它要訪問本地的一些資源,那麼異常將被觸發,它將會無情地被異常扔出去,若拷貝到本地硬盤上運行則一切正常。內存管理中的垃圾收集機制減輕了開發人員對內存管理的負擔。.Net平台提供的垃圾收集器(Garbage Collection,GC)將負責資源的釋放與對象撤銷時的內存清理工作。
變量是類型安全的。C#中不能使用未初始化的變量,對象的成員變量由編譯器負責將其置為零,當局部變量未經初始化而被使用時,編譯器將做出提醒;C#不支持不安全的指向,不能將整數指向引用類型,例如對象,當進行下行指向時,C#將自動驗證指向的有效性;C#中提供了邊界檢查與溢出檢查功能。
五、版本處理技術
C#提供內置的版本支持來減少開發費用,使用C#將會使開發人員更加輕易地開發和維護各種商業用戶。
升級軟件系統中的組件(模塊)是一件容易產生錯誤的工作。在代碼修改過程中可能對現存的軟件產生影響,很有可能導致程序的崩潰。為了幫助開發人員處理這些問題,C#在語言中內置了版本控制功能。例如:函數重載必須被顯式聲明,而不會象在C++或Java中經常發生的那樣不經意地被進行,這可以防止代碼級錯誤和保留版本化的特性。另一個相關的特性是接口和接口繼承的支持。這些特性可以保證復雜的軟件可以被方便地開發和升級。
六、靈活性和兼容性
在簡化語法的同時,C#並沒有失去靈活性。盡管它不是一種無限制語言,比如:它不能用來開發硬件驅動程序,在默認的狀態下沒有指針等等,但是,在學習過程中你將發現,它仍然是那樣的靈巧。
如果需要,C#允許你將某些類或者類的某些方法聲明為非安全的。這樣一來,你將能夠使用指針、結構和靜態數組,並且調用這些非安全代碼不會帶來任何其它的問題。此外,它還提供了一個另外的東西(這樣的稱呼多少有些不敬)來模擬指針的功能--delegates,代表。再舉一個例子:C#不支持類的多繼承,但是通過對接口的繼承,你將獲得這一功能。
下面談安全性。
正是由於其靈活性,C#允許與C風格的需要傳遞指針型參數的API進行交互操作,DLL的任何入口點都可以在程序中進行訪問。C#遵守.Net公用語言規范(Common Language Specification,CLS),從而保證了C#組件與其它語言組件間的互操作性。元數據(Metadata)概念的引入既保證了兼容性,又實現了類型安全。