1. 程式人生 > >C#語言的特點

C#語言的特點

C#語言的特點

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)概念的引入既保證了相容性,又實現了型別安全。