標籤:
.Net FrameWork
從以前的dos平台到現今的Windows 2003、Vista、Win7,開發語言也是百花齊放、究竟選擇哪一種,到底哪個才是最好的?更為痛苦的是團隊內成員之間用的開發語言的一致性的要求,不一致的話,VC++開發的類庫檔案Delphi,無法調,反之也如此,無法良好的實現代碼重用、效率提高等,不得不痛苦的去查Windows API等巨厚無比的手冊、寶典,自己重新寫成類庫等來調用。
那麼沒有更好技術,實現各個語言之間的共通嗎?團隊成員之間不再局限於語言的困擾,.Net FrameWork就是應時而生的產物。
.Net FrameWork也叫.Net 架構,主要包括兩部分內容:通用語言執行平台(CLR)和架構類庫集(FCL)。
C#、VB、VC++、J# |
Visual Studio.Net IDE |
Common Language Specification(CLS) |
.Net 3.0、3.5 4.0組件(WPF、WWF、WCF) |
Asp.Net 、Ado.Net、Winform、WinCe |
基礎類庫(FCL) |
通用語言執行平台(CLR) |
Windows XP、WindowsVista、Windows7作業系統 |
原來的程式設計語言都是針對平台的,比如Windows、Linux,而現在從C# 、Java 開始,一種新的程式語言執行方式產生了,就是“中間代碼+虛擬機器”的執行機制。這種中間代碼是不能直接執行的,它需要“虛擬機器”的裝置來管理和執行,可以使解釋執行也可以使編譯執行。如所示:
在.Net 架構裡管理和執行中間代碼的虛擬機器,就是通用語言執行平台(CLR),它負責管理和執行由.Net編譯器產生的中間代碼。
執行過程如下:
ü 在開發環境VisualStudio.Net中編寫C#代碼
ü 編譯器將代碼編譯成中繼語言代碼(中繼語言類似於組合語言,但不是機器碼)
ü 中繼語言代碼由CLR管理和執行。
注意,通用語言執行平台的另外一個作用是可以輕鬆實現跨平台(條件是在作業系統上安裝.Net FrameWork,微軟雖然自己並不提倡跨平台(跨平台會影響Windows作業系統的市場壟斷),但現在已經出現了在Linux作業系統中運行和編輯.Net程式的平台,就是Mono(包含了C#編譯器、CLR以及FCL)
. 什麼是中繼語言呢?假設我們有漢語、日語、法語三位學者,他們正在交流一個問題,應該怎麼交流呢?如果有一種他們都懂的語言(英語、手語或世界語)來交流,他們彼此才能明白。
在.Net中中繼語言就類似於現實中的英語、手語或世界語,正是由於VB、C#、J#、VC++等程式設計語言被編譯成中繼語言,CLR最終執行的是中繼語言,所以這裡產生了一個語言無關性的問題。
語言無關性是指.Net架構產生的最終代碼是和具體程式設計語言無關的,只和中繼語言有關。不管你使用哪種程式設計語言,最終都要變為中繼語言,你使用任何語言VB或C#都是等效的。現在在公司團隊中對於成員使用VB或C#寫作就變得簡單多了,二者的東西可以互相調用。這樣帶來的效益是可觀的,節省了我們對於不同程式設計語言知識的學習時間,將更多的精力放在程式的商務邏輯等方面。
CLS被稱為通用語言規範,它用來定義.Net語言都應遵循的規則。CTS稱作一般型別系統,它通常包含標準資料類型和等。
CLS定義了.Net程式設計語言(C#、VB、VC等)資料類型的最小特性集,只有遵循CLS的程式設計語言定義的值類型或參考型別才會被其他程式設計語言所引用。比如你在C#中可以定義Uint32傳回型別的方法,但這個資料類型並不是CLS所規定的,那麼在VB中調用這個方法就會出現麻煩或產生錯誤。也就是說,保證不同語言程式的互通性的前提是,在程式裡要使用CLS裡規定的資料類型進行編程。
而CTS可以說是.Net的特性全集,從右圖中你可以看出某個程式設計語言的類型等特性只不過是CTS的一個子集。如果你直接使用IL編程,那麼你可以使用CTS的所有特性,如果你使用C#,那麼你只能使用CTS裡面針對C#的那部分類型或準則。
CTS描述了語言在.Net環境中的定義及其行為方式,一門語言要進入.Net環境運行,就必須符合CTS的規定。對於.Net中的任何語言,其類的定義方式、繼承的文法甚至對象的生命週期等相關的文法都是CTS規定的。
. 在.Net中,微軟已經為廣大的程式員們提供了強大無比的類庫來方便大家輕鬆的開發程式。關於類庫的概念一直就存在,以前的VC有MFC類庫、Delphi有VCL類庫、Java有Swing、SWT等類庫。這些類庫都封裝了系統底層的功能,並提供更好的操作方式。
.Net中的類庫封裝了對Windows、網路、檔案、多媒體的處理功能,是所有.Net語言都必須使用的核心類庫。在Visual Studio中使用.Net基本類庫(FCL)我們可以開發以下六種應用程式:
n Windows表單應用程式
n Windows控制台應用程式
n XML Web服務
n Asp.Net Web表單應用程式
n Windows服務
n .Net組件
FCL類庫大約有7000多個類(每個類可能會有上百個方法或屬性,比當初18000多個Win32 API顯得更厲害了),別看多,理清思路與脈絡、萬法歸一,學習不是難事。
言歸正傳,這些類被按照命名空間進行了分別別類(命名空間是對類進行分類的)。常用的類庫如下:
命名空間 |
說明 |
System |
包括最基本的類,這些類提供資料類型、事件和事件處理、介面、屬性、異常處理等操作。 |
System.Drawing |
處理圖形和繪圖,包括列印 |
System.Data |
處理資料存取和管理,在定義 ADO.NET 技術中扮演重要角色 |
System.IO |
管理對檔案和流的同步和非同步訪問 |
System.Windows |
處理基於表單的視窗的建立 |
System.Reflection |
包含從程式集讀取中繼資料的類 |
System.Threading |
包含用於多線程編程的類 |
System.Collections |
包含定義各種對象集的介面和類 |
System.Net |
提供用於網路通訊的類、如P2P通訊、網路聊天等 |
為什麼選擇C#,看看以前在Win32下開發一個簡單表單程式師多麼的困難吧。代碼 如下:
使用Windows API顯示一個表單的程式:
HWND hwndMain = CreateWindowEx(
0, "MainWinClass","Main Window",
WS_OVERLAPPEDWINDOW |WS_HSCROLL | WS_VSCROLL,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
(HWND)NULL, (HMENU)NULL,hInstance, NULL);
ShowWindow(hwndMain, SW_SHOWDEFAULT);
UpdateWindow(hwndMain);
在.Net架構下使用C#顯示一個表單的程式:
Form form = new Form();
form.Text = "Main Window";
form.Show();
其他行業不再列舉,總而言之,使用.Net進行企業級開發、遊戲定製、使用者服務越來越多,已經應用到社會的方方面面。
在本章中,我們主要學習了:
u 什麼是.NetFrameWork
u CTS和CLS的概念
u .Net FrameWork行業應用
英文 全文 中文
CLR CommonLanguage Runtime 通用語言執行平台
FCL FoundationCommon Library 基礎類庫
MSIL MicrosoftIntermediateLanguage 微軟中繼語言
CTS Common Type System 公用類型系統
CLS Common Language Specification 通用語言規範
使用MSDN瞭解MSIL、CTS、CLS的一些詳細介紹,進行總結歸納。
C#OOP之十四 .Net Framework簡介