標籤:des style blog http io os 使用 java ar
一.C#和.NET關係
1. 首先C#語言有兩個很重要的方面:第一它是為了Microsoft的.NET Framework的結合而設計的,其次它是一種為問題而設計解決問題的方法的語言,它有很多相似語言的長處。
C#本身就是一種語言,它不是.NET的一部份,兩者各有所長,但兩者是一起使用。
2.什麼是.NET
.NET是微軟的新一代技術平台,為敏捷商務構建互聯互連的應用系統,這些系統是基於標準的,聯通的,適應變化的,穩定的和高效能的。.NET應用它是一個運行於。NET
Framework之上的應用程式。(更精確的說一個。NET應用是一個使用.NET Framework類庫來編寫,並運行於通用語言執行平台 Common Language Runtime之上的應用程式)。
二.公用語言運行庫
1. .NET Framework的核心是公用語言運行庫(CLR)或.NET運行庫,一般將CLR控制台下啟動並執行代碼稱為Managed 程式碼(managed code).
在.NET中完成編譯的兩種方法:1·將原始碼轉換為Microsoft中繼語言。2·利用CLR把IL編譯成平台專用代碼。Microsoft中繼語言的理念:低級語言,文法簡單,(文法簡單表現在它使用數字代碼而不是文本代碼),能快速的轉換為本地機器碼,對於代碼來說這種設計具有重要的有點:平台無關性,提高效能和語言的互通性。
1>.平台無關性:包含位元組碼指令的同一檔案可以放在任何一個平台中,運行時後面的編譯就可以很輕鬆的完成,這樣一來平台上啟動並執行代碼就是特定的,換一句話說,就是編譯成中繼語言時同時獲得了.NET的平台無關性。和它相同的是編譯Java時位元組碼就會獲得Java的平台無關性。
2>提高效能:因為IL總是即時編譯的(JIT編譯),之前的Java在運行應用程式時會把位元組碼轉換為內部可執行代碼,這樣的過程會導致效能的損失,而JIT編譯是一種通過在運行時將位元組碼翻譯為機器碼,從而改善位元組碼編譯語言效能的技術。JIT編譯器不是把整個程式一次性的編譯完,如果這樣一次性編譯完就會浪費很多的時間,而是只編譯被調用的那部分。編譯代碼過一次後,得到的本地可執行程式就會儲存起來,知道退出該程式為止,這樣在下次運行此代碼時,就不用重新編譯了。
3>語言的互通性:IL功能:支援平台無關性,還支援語言互通性(能將任何一種語言編譯為中繼語言)編譯成語言的代碼和其他語言編譯之後的代碼進行互相操作。
三.中繼語言
中繼語言的特徵:·物件導向和介面的支援·實值型別和參考型別之間的顯著差異·強資料類型化·使用異常來處理錯誤·使用特性(attribute).
使用.NET架構提供的編譯器可以直接將來源程式編譯為.exe或.dll檔案但此時編譯出來的程式碼並不是cpu能直接執行的機器代碼,而是
中繼語言(IL)的代碼.
使用中繼語言的優點:1.可以實現平台無關性,即與特定的cpu無關。2.只要把.NET架構某種語言編譯成IL代碼,就實現.NET架構中語言之間的互動操作。
1.COM介面理念:提供一個契約,實現給定介面的類必須提供該介面指定的方法和屬性的實現方式。
另外中繼語言還引入了介面的概念
另外中繼語言還引入了介面的概念用.NET建立的介面與COM介面不同,它不用支援任何COM基礎結構比如說:它們不是派生自IUnknown,也沒有對應的GUID,但它們與COM介面共用同一理念。
語言互通性的含義:是用一種語言編寫的類應能直接與用另一種語言編寫的類通訊。要點是:1.用一種語言編寫的類應能繼承用另一種語言編寫的類。2.一個類應能包含另一個類的執行個體,切不管這兩個類是使用的什麼語言。3.一個對象應能直接調用用其他語言編寫另一個對象的方法。4.對象的應用應能在方法之間傳遞。5.在不同的語言之間調用方法時,應能在調試器中交替調試這些方法調用,即調試不同語言編寫的原始碼。
2.不同的實值型別和參考型別,他的特性是實值型別和參考型別之間有明顯的區別。儲存方法:實值型別,變數直接儲存其資料,而對於參考型別,變數僅儲存其地址,然後對應的資料可以在地址中找到。
強資料類型化
如果資料類型不做顯式轉換,不能隨意賦值,叫做強資料類型。相對的弱資料類型,在不做顯示轉換的情況下,將其賦值給其他類型,可做自動轉換的,叫做弱資料類型。上面的中繼語言的一個重要的方面是它基於強資料類型化。強迫實作類別型的安全性會降低效能。但在許多情況下,我們從.NET提供的,依賴於型別安全的服務中獲得更多好處。服務包括:·語言的互通性·垃圾收集·安全性·應用程式定義域。
1.語言互通性中強資料類型化重要的原因:如果類派生自其它類,或包含其他類的執行個體,它就需要知道其它類使用的所有資料類型。
例如:假定將Visual Basic 2010類中的一個方法定義為返回一個Integer---Visual Basic 2010可以使用的標準資料類型之一。但C#沒有該名稱的資料類型,顯然,只有編譯器知道如何把Visual Basic 2010的Integer類型映射為c#定義的某種已知類型,才可以從該類型派生,使用這個方法,並在c#代碼中使用返回的類型,這個問題在.NET中如何解決呢?
回答:此類資料類型問題在.NET中使用通過類型系統(CTS)得到瞭解決。Visual Basic 2010的Integer實際上一個32位有符號的整數,它實際映射為中繼語言類型Int32,因此在中繼語言代碼中就指定這種資料類型,C#編譯器可以用這種,所以問題解決了。
CTS的階層反應了中繼語言的單一繼承的物件導向方法。
記憶體回收,用來在.NET中進行記憶體管理,特別是它可以恢複正在恢複在啟動並執行應用程式需要的記憶體。
windows平台已經使用了兩種技術來釋放進程向系統動態請求的記憶體:1·完全以手工方式使應用 程式碼完成這些工作。2·讓對象維護引用計數。 那麼.NET運行庫採用的方法是記憶體回收行程,這是一個程式,它的目的是清理記憶體。使用的方法時 所有動態請求的記憶體都分配到推上(所有的語言都是這樣處理的,但在.NET中,CLR維護它自己的託管堆 供.NET應用程式使用)。每隔一段時間,當.NET檢測到給定進程的託管堆已滿,需要清理時就會調用記憶體回收行程。 記憶體回收行程處理目前代碼中的所有變數,檢測對儲存在託管堆上的對象的引用,確定哪些對象可以從代碼中訪問 就是哪些對象有引用,沒有引用的對象就不在認為可以從代碼中訪問,因而被刪除。
應用程式定義域它用於減少運行應用程式的系統開銷,這些應用程式需要與其他程式分離開來,但仍需要彼此通訊。
孤立代碼的唯一方式是通過進程來實現的,啟動一個新的應用程式時,它會在一個進程環境內運行,Windows通過地址空間把進程分割開來,每個進程有4GB的虛擬記憶體來儲存其資料和可執行代碼,(4GB對應的是32位系統)它利用額外的間接方式把這些虛擬記憶體掛載到實體記憶體或磁碟空間的一個特殊地區中,每個進程都會有不同的掛載,虛擬位址空間塊掛載的實體記憶體之間不重疊。
任何進程都只能通過指定虛擬記憶體中的一個地址來訪問記憶體,也就是進程不能直接存取實體記憶體,因此一個進程不可能訪問分配給另一個進程的記憶體。
進程對確保安全有很大的協助,但它們有個大缺點就是效能。解決這一問題的方法時使用基於DLL的組件,讓所有的組件在同一個地址空間中運行————其風險是執行出錯的組件會影響其他組件。
應用程式定義域是分離組件的一種方式,它不會導致因在進程之間傳遞資料而產生效能問題,其方法是把任何一個進程分解到多個應用程式定義域中,每個應用程式定義域對應一個應用程式,執行的每個線程都運行在一個具體的應用程式定義域中。
程式集
程式集是包含編譯好的,面向.NET Framwork的代碼的邏輯單元。
要點:它是一個邏輯單元。程式集的一個重要的特性是他們包含的中繼資料描述了對應代碼中定義的類型和方法,程式集包含程式的中繼資料。
程式集的兩種類型:私用組件和共用組件。1.私用組件一般是附帶在某個軟體上的,常見的情況是,以可執行檔或許多庫的方式提供應用程式這些庫包含的代碼只能用於該應用程式,。0影響(xcopy)安裝是:把相應的檔案放在檔案系統的對應檔案夾中。共用組件是其他應用程式可以使用的公用庫。全域組件快取是把共用組件放在檔案系統的一個特定的子目錄樹中。根據私密金鑰加密法為共用組件指定一個名稱稱為強名。(必須由要引用共用組件的應用程式來引用)。
反射 因為程式集儲存了中繼資料,包括在程式中定義的所有類型和這些類型的成員的細節,所以可以編程訪問這些中繼資料。
.NET基類的一個主要優點是非常的直觀和易用。例如,要啟動一個線程,可以調用Thread類的Start()方法。要禁用TextBox,應把TextBox對象的Enabled的屬性設定為false.
名稱空間可以互相嵌套,大多數用於一般目的的.NET基類位於名稱空間System中,基類Arry在這個名稱空間中,全名就是System.Arry。.NET需要在名稱空間中定義所有的類型如:把Customer類放在名稱空間中YourCompanyName中,則這個類的全名就是YourCompanyName.Customer.
用c#建立.NET應用程式
建立ASP.NET應用程式1.ASP.NET的功能
主要;ASP.NET頁面是結構化的,ASP.NET頁面的另一個優點是可以在Visual Studio 2010中建立他們,在該環境下,可以建立ASP.NET頁面使用的商務邏輯和資料訪問組件。Wed伺服器控制項用於添加到Wed表單上的控制項與ActiveX控制項並不是一種控制項,他們是ASP.NET名稱空間中的XML標記。
XAML是用於建立表單的XML聲明,它代表WPF應用程式的所有可視化部分和操作。
.NET的下述特性在編譯和執行過程的作用:程式集和.NET基類,COM組件,JIT編譯,應用程式定義域,記憶體回收。
。
1.一步一步學c#(一):.NET體繫結構(知識點)