第一章 體系結構 ø
物件導向程式設計 ø
優秀的設計:乙個基類庫,它是以一種非常直觀的方式設計出來的
ø語言的無關性 ø
對動態web頁面的更好支援
ø高效的資料訪問
ø**共享
ø增強的安全性
øweb
服務的支援
ø對安裝沒有任何影響øc#
:是使用.net的一種物件導向的新語言
øvisual studio 2005
øsqlserver整合
ø64位支援 ø泛型
ø匿名方法 ø
可空型別 ø
迭代器
ø部分類
ø完全支援類和物件導向程式設計,包括介面和繼承、虛函式和運算子過載的處理。
ø定義完整、一致的基本型別集。
ø對自動生成xml文件說明的內建支援。
ø自動清理動態分配的記憶體。
ø可以用使用者定義的特性來標記類或方法。這可以用於文件說明,對編譯有一定的影響(例如,把方法標記為只在除錯時編譯)。
ø對.net基類庫的完全訪問權,並易於訪問windows api。
ø可以使用指標和直接記憶體訪問,但c#語言可以在沒有它們的條件下訪問記憶體。
ø以visual baisc的風格支援屬性和事件。
ø改變編譯器選項,可以把程式編譯為可執行檔案或.net元件庫,該元件庫可以用與activex控制項(com元件)相同的方式由其他**呼叫。øc#
可以用於編寫asp.net動態web頁面和xml web服務。
ø該語言不適用於編寫時間急迫或效能非常高的**,例如乙個要執行1000或1050次的迴圈,並在不需要這些迴圈時,立即清理它們所占用的資源。在這方面,c++可能仍是所有低階語言中的佼佼者。 ø
c#缺乏效能極高的應用程式所需要的關鍵功能,包括保證在**的特定地方執行的內聯函式和析構函式。但這類應用程式非常少。
.net framework
的核心是其執行庫的執行環境,稱為公共語言執行庫(
clr)
或.net
執行庫。通常將在
clr的控制下執行的**稱為託管**
(managed code)。
但是,在clr執行開發的源**之前,需要編譯它們(在c#中或其他語言中)。在.net中,編譯分為兩個階段:
(1)
把源**編譯為
microsoft
中間語言(il)
。 (2) clr
把il編譯為平台專用的**。
ø平台無關性
ø提高效能
ø語言的互操作性
語言互操作性的真正含義是用一種語言編寫的類應能直接與用另一種語言編寫的類通訊。特別是: 1、
用一種語言編寫的類應能繼承用另一種語言編寫的類 2、
乙個類應能包含另乙個類的例項,而不管它們是使用什麼語言編寫的。 3、
乙個物件應能直接呼叫用其他語言編寫的另乙個物件的方法。 4、
物件(或物件的引用)應能在方法之間傳遞。 5、
在不同的語言之間呼叫方法時,應能在偵錯程式中除錯這些方法呼叫,即除錯不同語言編寫的源**。
ø物件導向和使用介面 ø
值型別和引用型別之間的巨大差別 ø
強資料型別 ø
使用異常來處理錯誤 ø
使用特性(attribute)
ø私有程式集
私有程式集是最簡單的一種程式集型別。私有程式集一般附帶在某些軟體上,且只能用於該軟體中。附帶私有程式集的常見情況是,以可執行檔案或許多庫的方式提**用程式,這些庫包含的**只能用於該應用程式。
系統可以保證私有程式集不被其他軟體使用,因為應用程式只能載入位於主執行檔案所在資料夾或其子資料夾中的程式集。
使用者一般會希望把商用軟體安裝在它自己的目錄下,這樣軟體包沒有覆蓋、修改或載入另乙個軟體包的私有程式集的風險。私有程式集只能用於自己的軟體包,這樣,使用者對什麼軟體使用它們就有了更多的控制。因此,不需要採取安全措施,因為這沒有其他商用軟體用某個新版本的程式集覆蓋原來的私有程式集的風險(但軟體是專門執行懷有惡意的損害性操作的情況除外)。名稱也不會有衝突。如果私有程式集中的類正巧與另乙個人的私有程式集中的類同名,是不會有問題的,因為給定的應用程式只能使用私有程式集的名稱
因為私有程式集完全是自含式的,所以安裝它的過程就很簡單。只需把相應的檔案放在檔案系統的對應資料夾中即可(不需要登錄檔項),這個過程稱為「0影響(xcopy)安裝」。 ø
共享程式集
共享程式集是其他應用程式可以使用的公共庫。因為其他軟體可以訪問共享程式集,所以需要採取一定的保護措施來防止以下風險: 1、
名稱衝突,另乙個公司的共享程式集執行的型別與自己的共享程式集中的型別同名。因為客戶機**理論上可以同時訪問這些程式集,所以這是乙個嚴重的問題。
2、程式集被同乙個程式集的不同版本覆蓋——新版本與某些已有的客戶機**不相容。
這些問題的解決方法是把共享程式集放在檔案系統的乙個特定的子目錄樹中,稱為全域性程式集快取記憶體(gac)。與私有程式集不同,不能簡單地把共享程式集複製到對應的資料夾中,而需要專門安裝到快取記憶體中,這個過程可以用許多.net工具來完成,其中包含對程式集的檢查、在程式集快取記憶體中設定乙個小的資料夾層次結構,以確保程式集的完整性。
為了避免名稱衝突,共享程式集應根據私有金鑰加密法指定乙個名稱(私有程式集只需要指定與其主檔名相同的名稱即可)。該名稱稱為強名(strong name),並保證其惟一性,它必須由要引用共享程式集的應用程式來引用。
因為程式集儲存了元資料,包括在程式集中定義的所有型別和這些型別的成員的細節,所以可以程式設計訪問這些元資料。這個技術稱為反射。
包含了型別資訊和實現的pe格式檔案稱為乙個模組(module),模組是執行時型別載入的基本單位。如果程式引用了模組中的某個類,那麼clr將會將整個模組載入到記憶體中
類集是.net中相關型別的物理組織形式。它是進行應用程式部署、版本控制、重用和許可權分配的基本單位。類集包含了類集清單(manifest)、在類集中定義的型別資訊(metadata)、類方法的實現**以及其他資源。類集可以由乙個或多個檔案組成,這些檔案或者包含資源資料,或者是包含型別資訊和實現的pe格式檔案。
1) 用c#開發一些程式
2) 用c#編譯器或cls相容的編譯器編譯成exe
3) 編譯器將生成的il**和附加資訊(manifest)放入擁有乙個標準pe頭的win32可執行檔案的唯讀部分。
4) 編譯器在建立這個可執行檔案時匯入(import)乙個名為_corexemain的函式。這個函式是.net ee(execution engine)--.net執行期引擎的入口函式。
5) 當執行這個win32可執行檔案時,因為其主要是依賴於dll的pe檔案,作業系統將會呼叫位於mscoree.dll中的_corexemain函式。
6) 作業系統通過pe檔案裡的進入點,呼叫mscoree.dll。並能保證在windows裡可以有很多程式同時執行。
7) 因為作業系統不能執行.net il**,exe裡的進入點只是簡單的中介,它將指示作業系統呼叫_corexemain函式。
8) 隨後_corexemain函式開始解釋位於pe檔案中的il**。
9) 因為il是不能被直接執行的, .net ee使用稱為jitter (just in time compiler)的即時編譯器將il**編譯成本地cpu機器**用於執行。這一即時編譯過程只在第一次執行的時候進行。
系統學習程式設計筆記(二)
電腦科學cs50 第1集 演算法,程式設計,語言等 這門課程是哈佛大學的,這個老師富有活力和激情,我的第一反應,不是覺得自己在聽課,而是覺得自己在欣賞乙個話劇,對,就是這種話劇的感覺。相比於之前在大學裡面上過的略感枯燥的計算機相關的課程,驚嘆於世界頂尖學府的教學水平。第一節課是緒論,一般來說,感覺緒...
系統學習程式設計筆記(七)
電腦科學cs50 第3集 c語言,源 編譯器 1 本集主要介紹了c語言編寫的乙個hello world程式,使用的是gcc編譯器,採用的是連線伺服器進行 的編譯和執行,而其實這是工業界經常採用的方式。原來csv檔案其實是用 分割儲存的文字檔案,只是開啟的時候看起來像excel檔案。詳細介紹了一些轉義...
系統學習程式設計筆記(二十)
完成 python 教程。6 函式式程式設計 一 reduce f,x1,x2,x3,x4 f f f x1,x2 x3 x4 練習1 利用map 函式,把使用者輸入的不規範的英文名字,變為首字母大寫,其他小寫的規範名字。輸入 adam lisa bart 輸出 adam lisa bart def...