第一章 C#簡介(rainbow 翻譯) (轉自重粒子空間)

來源:互聯網
上載者:User
<展現 C#> 第一章 C#簡介(rainbow 翻譯)

  
出處:http://www.informit.com/matter/ser0000001/chapter1/ch01.shtml

本文:

展現   C#
  
第一章                      C#    簡介

歡迎您加入C#的世界! 這一章將把您引進C#的天地,並回答一些相關的問題,如:您為什麼要使用C#,C++和C#的主要有什麼不同點,以及為什麼C#使開發更容易而且還使您感到很有趣。
為什麼是另外一種程式設計語言?
必須回答的一個問題:當您已經使用C++或VB從事企業開發時,為什麼還要學習另一種語言?  市場式的回答就是:"在企業計算領域,C#將會變成為用於編寫"下一代視窗服務"(Next Generation Windows Services,簡寫為NGWS )應用程式的主要語言。"  這一章將對用參數請求提供支援,並陳列了C#的一些功能。這一章會使您開胃的。
C#語言自C/C++演變而來。但是,它現代、簡單、完全物件導向和型別安全。如果您是C/C++程式員,學習曲線將會很平坦。許多C#語句直接借用您所喜愛的語言,包括運算式和操作符。假如不仔細看,簡直會把它當成C++。
關於C#最重要的一點:它是現代的程式設計語言。它簡化和現代化了C++在類、名字空間、方法重載和異常處理等領域。屏棄了C++的複雜性,使它更易用、更少出錯。
對C#的易用有貢獻的是減少了C++的一些特性,不再有宏、模板和多重繼承。特別對企業開發人員來說,上述功能只會產生更多的麻煩而不是效益。
使編程更方便的新功能是嚴格的型別安全、版本控制、垃圾收集(garbage collect)等等。所有的這些功能的目標都是瞄準了開發面向組件的軟體。

在繼續呈現出更多的功能之前,我想停下來並在下面說明C#至關重要的各種要素。

簡單
現代
物件導向
型別安全
版本控制
相容
靈活


簡單
C#具有C++所沒有的一 個優勢就是學習簡單。該語言首要的目標就是簡單。很多功能(還不如說是缺少了C++的一些功能)有助於C#全方位的簡單。
在C#中,沒有C++中流行的指標。預設地,您工作在受管理的代碼中,在那裡不允許如直接存取記憶體等不安全的操作。我想沒有C++程式員可以聲稱,從沒有使用指標訪問過不屬於他們的記憶體。
與指標"戲劇性"密切相關的是"愚蠢的"操作。在C++中,有::、.、和->操作符,它們用於名字空間、成員和引用。對於新手來說,操作符至今仍是學習的一道難關。C#棄用其它操作符,僅使用單個操作符 "."。現在一個程式員所需要理解的就是嵌套名字的註解了。
您不必記住基於不同處理器架構的隱含的類型,甚至各種整型的變化範圍。C#使用統一的類型系統,屏棄了C++多變的類型系統。這種系統充許您把各種類型作為一個對象查看,它是一個原始類型還是一個full-blown 類。和其它程式設計語言相比,由於加框(boxing)和消框(unboxing)的機制,把簡單類型當作對象處理並不能獲得效能的改善。稍後將詳細解釋加框和消框,但基本上僅當需要時才使用對象訪問簡單類型這種技術。
首先,老練的程式員可能不喜歡它,但是整型和布爾型如今終歸是兩種完全不同的資料類型。這就意味著原來if語句中錯誤的賦值現在會被編譯出錯,因為if語句只接受布爾類型的值。再也不會出現誤用賦值符為比較符這樣的錯誤!
C#同時也解決了存在於C++中已經有些年頭的多餘東西(redundancies)。這種多餘包括常數預定義,不同字元類型等。鑒於多餘表單已經從該語言中消失,故一般在C#中都可以使用表單了。

現代
您投入學習C#的努力是一筆大投資,因為C#是為編寫NGWS 應用程式的主要語言而設計。您 將會發現很多自己用C++可以實現或者很費力實現的功能,在C#中不過是一部分基本的功能而已。
對於企業級的程式設計語言來說,新增的金融資料類型很受歡迎。您用到了一種新的十進位資料類型,它專用於金融計算方面。如果不喜歡這種現成簡單的類型,根據您應用程式的特殊需求,可以很容易地建立出新的一種資料類型。
我已經提到,指標不再是您編程武器的一部分。不要太驚訝,全面的記憶體管理已經不是您的任務。運行時NGWS提供了一個垃圾收集器,負責C#程式中的記憶體管理。因記憶體和應用程式都受到管理,所以很必要增強型別安全,以確保應用的穩定性。
對於C++程式員,異常處理的切不是新的東西,但它是C#的主要功能。C#的異常處理與C++的不同點在於它是交叉語言的(運行時的另一個功能)。在沒有C#之前,您必須處理怪異的HRESULTs,但現在由於使用了基於異常的健壯的出錯處理, 這一切都 結束了。
對於現代的應用程式,安全是首要的,C#也不會例外。它提供了中繼資料文法,用於聲明下述NGWS安全模式的能力和許可。中繼資料是NGWS運行時的一個關鍵的概念,下一章將涉及到它更深的含義。

物件導向
您不會預料一種新語言不支援物件導向的功能吧? C#當然支援所有關鍵的物件導向的概念,如封裝、繼承和多態性。完整的C#類模式構建在NGWS運行時的虛擬對象系統(VOS,Virtual Object System)的上層,VOS將在下章描述。對象模式只是基礎的一部分,不再是程式設計語言的一部分。
您一開始必須關注的事,就是不再有全域函數、變數或者是常量。所有的東西都封裝在類中,包括案例成員(通過類的案例--對象可以訪問)或都靜態成員(通過資料類型)。這些使C#代碼更加易讀且有助於減少潛在的命名衝突。
定義類中的 方法預設是非虛擬(它們不能被衍生類別改寫)。主要論點是,這樣會消除由於偶爾改寫方法而導致另外一些原碼出錯。要改寫方法,必須具有顯式的虛擬標誌。 這種行為不但縮減速了虛擬函數表,而且還確保正確版本的控制。
使用C++編寫類,您可以使用存取權限(access modifiers)  給類成員設定不同的訪問等級。C#同樣支援private、protected 和public 三種存取權限 ,而且還增加了第四種:internal。有關存取權限 的詳細情況將在第五章 "類" 中說明。
您曾經建立了多少個類是從多基類派生出來的(ATL 程式員,您的投票不計在內!) ?  大多數情況,僅需從一個類派生出。多基類惹出的麻煩通常比它們解決的問題還多。那就是為什麼C#僅允許一個基類。如果您覺得需要多重繼承,可以運用介面。
一個可能出現的問題:在C#中不存在指標,如何模仿它? 這個問題的答案很有代表性,它提供了對NGWS運行時事件模式的支援。再次,我將把對它的全面解釋放到第五章。

型別安全
我再次選指標作為一個例子。在C++中擁有一個指標,您能自由地把它強制轉換成為任何類型,包括幹出諸如把一個int*(整型指標)強制轉換成一個double *(雙精確度指標)這樣的傻事。只要記憶體支援這種操作,它就"幹過"。這並不是您所想象的企業級程式設計語言的型別安全。
綱要性的問題,,C#實施最嚴格的型別安全,以保護自己及垃圾收集器(garbage collector)。所以必須遵守C#中一些相關變數的規則:
您 不能使用沒有初始化的變數。對於對象的成員變數,編譯器負責清零。而局部變數,則由您負責清零。當您使用一個沒有初始化的變數時,編譯器會教您怎麼做。優點是能夠避免由於使用不經初始化的變數計算結果而導致的錯誤,而您還不知道這些奇怪的結果是如何產生的。
C#取消了不安全的類型轉換。不能把一個整型強制轉換成一個參考型別(如對象),而當向下轉換時,C#驗證這種轉換是正確的。(也就是說,衍生類別真的是從向下轉換的那個類派生出來的。)
邊界檢查是C#的一部分。再也不會出現這種情況:當數組實際只定義了n-1個元素,卻超額地使用了n個元素。
算術運算有可能溢出終值資料類型的範圍。C#允許在語句級或應用程式級檢測這些運算。在允許檢測溢出的情況下,當溢出發生時將會拋出一個異常。
在C#中,被傳遞的引用參數是型別安全的。

版本可控(Versionable)
在過去的幾年中,幾乎所有的程式員都至少有一次不得不涉及到眾所周知的"DLL地獄"。該問題起因於多個應用程式都安裝了相同DLL名字的不同版本。有時,老版本的應用程式可以很好地和新版本的DLL一起工作,但是更多的時候它們會中斷運行。現在的版本問題真是令人頭痛。
就象您將在第八章"用C#寫組件"所看到的,NGWS runtime 將對您所寫的應用程式提供版本支援。C#可以最好地支援版本控制。儘管C#不能確保正確的版本控制,但是它可以為程式員保證版本控製成為可能。有這種支援,一個開發人員就可以確保當他的類庫升級時,仍保留著對已存在的客戶應用程式的二進位相容。

相容
C#並沒有存在於一個封閉的世界中。它允許使用最先進的NGWS的通用語言規定(Common Language Specification,簡寫為CLS)訪問不同的API。CLS規定了一個標準,用於符合這種標準的語言的內部之間的操作。為了加強CLS的編譯,C#編譯器檢測所有的公用出口編譯,並在通不過時列出錯誤。
當然,您也想能夠訪問舊一點的COM對象。NGWS運行時提供對COM透明的訪問。如何整合原來的代碼將在第10章"非管理代碼的內部操作"有介紹。
OLE 自動化是一種特殊的動物。任一個使用C++建立OLE自動化項目的人已經喜歡上各種各樣的自動化資料類型。有個好訊息就是C#支援它們,而沒有煩鎖的細節。
最後,C#允許您 用C 原型的API進持內部操作。可以從您的應用程式訪問任何DLL中的進入點(有C的原型)。用於訪問原始API的功能稱作平台叫用服務(Plaform Invocation Services ,縮寫PInovke),第10章將展示使用C  API進行內部操作的一些例子。

靈活
上一部分的最後一段有可能提醒了程式員。您可能會問:"難道就沒有我要傳遞指標的API嗎?" 您是正確的。不是僅有少數的這種API,而是很多(有點保守的估計)。這種對原始WIN32代碼的訪問有時導致對非安全類指定指標的使用(儘管它們中的一些由於受COM和PInvoke的支援可以解決)。
儘管C#代碼的預設狀態是型別安全的,但是您可以聲明一些類或者僅聲明類的的方法是非安全類型的。這樣的聲明允許您使用指標、結構,靜態地分配數組。安全碼和非安全碼都運行在同一個管理空間,這樣暗示著當從安全碼調用非安全碼時不會陷入列集(marshaling)。

  小結
C#語言從C和C++演變而來,它是給那些願意犧牲C++一點底層功能,以獲得更方便和更產品化的企業開發人員而創造的。C#現代、簡單、物件導向和型別安全。儘管它借鑒了C和C++的許多東西,但是在一些諸如名字空間、類、方法和異常處理等特定領域,它們之間還存在著巨大的差異。
C#為您提供了方便的功能,如垃圾收集、型別安全、版本控制,等等。僅有的"代價"就是,代碼操作預設是型別安全的,不允許指標。光是型別安全就可以搞定了。但是,如果您需要指標,仍可以通過非安全碼使用它們,而且當調用非安全碼時,不能含有列集。


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。