明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

.NET框架程序設(shè)計讀書筆記(3)--.net框架類庫(FCL)與通用分類系統(tǒng)、代碼互設(shè)置

[摘要]1.5 .net框架類庫.net框架中包括有一組.net框架類庫(Framework Class Library,簡稱FCL)程序集,其中含 有幾千個類型的定義,每個類型都提供了某種功能。CLR和F...
1.5 .net框架類庫

.net框架中包括有一組.net框架類庫(Framework Class Library,簡稱FCL)程序集,其中含 有幾千個類型的定義,每個類型都提供了某種功能。

CLR和FCL允許開發(fā)人員創(chuàng)建以下幾種應(yīng)用程序:

l XML Web 服務(wù) 即XML Web Services,又簡稱Web服務(wù)。該服務(wù)使我得我們可以非常容易地通過互聯(lián)網(wǎng)來進行方法調(diào)用。

l Web 窗體 即Web Forms 就是ASP.NET應(yīng)用程序。他提供了類似于開發(fā)Windows程序的方法來開發(fā)Web應(yīng)用程序。

l Windows 窗體 即Windows Forms,Windows圖形用戶界面(GUI)應(yīng)用程序。

l Windows 控制臺應(yīng)用程序

l Windows 服務(wù)

l 組件庫



FCL的所有類型 可以通過 文檔查得。



1.6通用類型系統(tǒng)

類型為應(yīng)用程序和組件提供了它們所需要的功能。

類型作為一種機制使得一種語言編寫的代碼可以和另一種語言編寫的代碼進于無縫地集成。

類型是CLR的基礎(chǔ)。微軟為此專門制定了一個正式的規(guī)范----通用類型系統(tǒng)來描述類型的定義和行為。

CTS定義的類型的組成部分:

l 字段 字段是一個屬于對象狀態(tài)部分的數(shù)據(jù)成員。字段由它們的名稱和類型標識。

l 方法 方法是一個在對象上執(zhí)行某種操作的函數(shù),通常會改變對象的狀態(tài)。方法有一個名稱、簽名和修飾符。

l 屬性 屬性調(diào)用時,類似于字段,實現(xiàn)時,類似于方法。提供了與使用字段相似的方式來使用方法。

l 事件 事件允許在一個對象和其他相關(guān)聯(lián)的對象之間建立一個通知機制。

CTS定義的成員的可見性:

Private 方法只能被同一類型中的其他方法調(diào)用。

l Family 方法可以被派生類型中的代碼調(diào)用,而不管它們是否位于同一個程序集中。(C#中 稱之為:protected)

l Family 與 assembly 方法只可以被位于同一個程序集中的派生類型中的代碼調(diào)用。(C# 和Visual Basic沒有提供這種訪問控制。

l Assembly 方法可以被同一個程序集中的任何代碼調(diào)用,(在c#中稱為:internal).

l Family 和 assembly 方法可以被任何程序集中的派生類型的代碼調(diào)用,也可以被同一程序集中的任何類型調(diào)用。 C#稱為 Protected internal.

l Public 方法可以被任何程序集中的任何代碼調(diào)用。



CTS 僅支持 單繼承

CTS規(guī)定所有的類型都必須(直接或間接)繼承自預(yù)定義類型System.Object.





1.7 通用語言規(guī)范

CLR集成了所有的編程語言,并且允許一種語言創(chuàng)建的對象在另一種不同的語言編寫的代碼中被看作同等的成員。CLR的標準類型集合,自描述類型的信息(即元數(shù)據(jù)),和通用執(zhí)行環(huán)境使得這種集成成為可能。

通用語言規(guī)范(Common Language Specification,簡稱CLS),為描述了面向CLR的編譯器必須支持的一個最小特性集合。

CLS規(guī)定.net平臺下的各種語言必須支持類型規(guī)則的最小集合,所有.net平臺的語言都必須支持。當然,每種語言都可以更多地支持CTS上的規(guī)則。

C#和Visual Basic 都必須支持CLS,但除此這外,c#可以另外支持CTS的一些特性,而Visual Basic也可以直持一些C#沒有的CTS中的特性。當然,當你使用C#編寫供Visual Basic 使用的組件時,不能在公用的接口上使用Visual Basic不支持的特性。如:

Public Uint32 Abc() 該public 方法返回Uint32 Visual Basic不支持。編譯器會報錯。

當然,當你使用 private Uint32 Abc() ,是允許的,因為他不是公有的。



CLS規(guī)定,CLR中,類型的每個成員或者是一個字段,或者是一個方法。各種編程語言中的枚舉、數(shù)組、屬性、索引器、委托、事件、構(gòu)造器、析構(gòu)器、重載操作符、轉(zhuǎn)換操作符等等都需要在編譯時翻譯成字段或方法,這樣,其他語言才能夠訪問它們。



1.8 與非托管代碼互操作



.net框架提供了比其他開發(fā)平臺更為優(yōu)越的特性,并且允許應(yīng)用程序同時含有托管和非托管部分。具體來說,有三種互操作情形:



l 托管代碼調(diào)用DLL中的非托管函數(shù) 托管代碼可以很容易地使用一種稱作 P/Invoke(即Platform Invoke,平臺調(diào)用)的機制來調(diào)用DLL(動態(tài)鏈接庫文件)。

l 托管代碼使用現(xiàn)存的COM組件(非托管組件作為COM服務(wù)器) 可以創(chuàng)建描述它們的托管程序集。托管代碼可以象訪問其他托管代碼一樣訪問這些托管程序集中的類型。

l 非托管代碼使用托管類型(托管類型作為CO