考核理論整合面向?qū)ο罂偨Y(jié)_第1頁
考核理論整合面向?qū)ο罂偨Y(jié)_第2頁
考核理論整合面向?qū)ο罂偨Y(jié)_第3頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、面向?qū)ο蟮淖罨镜奶卣魇欠庋b性、繼承性和多態(tài)性:1. 封裝封裝就是指把對象的全部屬性和全部服務(wù)結(jié)合在一起形成一個不可分割的獨立單位。封裝是一種信息隱蔽技術(shù),用戶只能見到對象封裝界面上的信息,對象內(nèi)部對用戶是隱蔽的。封裝的目的在于將對象的使用者與設(shè)計者分開,使用者不必了解對象行為的具體實現(xiàn),只需要用設(shè)計者提供的消息接口來訪問該對象。例如,各種有標(biāo)準(zhǔn)視頻接口的設(shè)備都可以連接電視機。2.繼承特殊類的對象擁有其一般類的全部屬性與服務(wù),稱作特殊類對一般類的繼承,即在特殊類中不必重新定義已在一般類中定義過的屬性和服務(wù),這種特性在面向?qū)ο笾蟹Q作對象的繼承性。繼承在C#中稱為派生,其中,一般類稱為基類或父類,

2、特殊類稱為派生類或子類。例如靈長類動物稱為一般類,具有屬性包括手和腳(其它動物沒有),具有的服務(wù)是抓取東西(其它動物沒有),人類作為特殊的靈長類高級動物,除了繼承靈長類動物的所有屬性和服務(wù)外,還具有特殊的服務(wù)(創(chuàng)造工具)。繼承機制的優(yōu)勢在于降低了軟件開發(fā)的復(fù)雜性和費用,使軟件系統(tǒng)易于擴充3. 多態(tài)多態(tài)性是指在基類中定義的屬性或服務(wù)被派生類繼承后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。為了實現(xiàn)多態(tài)性,需要在派生類中更改從基類中自動繼承來的數(shù)據(jù)類型或方法。這種為了替換基類的部分內(nèi)容而在派生類中重新進行定義的操作,在面向?qū)ο蟾拍钪蟹Q之為覆蓋。例如,假設(shè)機動車類是一個基類,它具有一個稱為更換輪胎的

3、方法,但是當(dāng)從機動車派生火車類時,火車更話車輪的方法與一般的機動車不同,于是只能通過覆蓋的方法在火車類中重新定義一個更換車輪的方法,以替換其基類的方法。多態(tài)性的優(yōu)勢在于使軟件開發(fā)更加方便,增加程序的可讀性。類的常量成員是一種符號常量,必須指定名稱和值訪問修飾符包括:public、private、internal、protected、protected internal。 在使用訪問修飾符來定義命名空間、結(jié)構(gòu)和類及其成員時,需注意:(1)一個成員或類型只能有一個訪問修飾符,使用protected internal組合時除外。(2)命名空間上不允許使用訪問修飾符,命名空間沒有訪問限制。(3)如果未

4、指定訪問修飾符,則使用默認(rèn)的可訪問性,類成員默認(rèn)為private。(4)頂級類型(不嵌套在其他類型中的類型)的可訪問性只能是internal或public,默認(rèn)可訪問性是internal。定義方法的詳細說明(1) 訪問修飾符控制方法的訪問級別,可用于方法的修飾符包括:public、protected、private、internal等等。(2) 方法的返回值類型可以是任何合法的數(shù)據(jù)類型,包括值類型和引用類型。當(dāng)無返回值時,返回值類型使用void關(guān)鍵字來表示。(3) 方法名必須符合C#的命名規(guī)范,與變量名命名規(guī)則相同。(4) 參數(shù)列表是方法可以接受的輸入數(shù)據(jù)。當(dāng)方法不需要參數(shù)時,可省略參數(shù)列表,

5、但不能省略圓括號。當(dāng)參數(shù)不止一個時,需要使用逗號作間隔,同時每一個參數(shù)都必須聲明數(shù)據(jù)類型,即使這些參數(shù)的數(shù)據(jù)類型相同也不例外。(5) 花括號中的內(nèi)容為方法的主體,由若干條語句組成,每一條語句都必須使用分號結(jié)尾。當(dāng)方法結(jié)束時如果需要返回操作結(jié)果,則使用return語句返回,此時要注意return語句返回的值的類型要與方法返回值類型相匹配。如果方法使用void標(biāo)記為無返回值的方法,可省略return語句。1. 值類型參數(shù)調(diào)用方向方法傳遞值類型參數(shù)時,調(diào)用方將把實參變量的值賦給相對應(yīng)的形參變量,即實參變量和形參變量是兩個不相同的變量。實參變量的值傳遞給形參變量時是一種單向值傳遞。引用型參數(shù)與值參數(shù)不

6、同,調(diào)用方向方法傳遞引用類型參數(shù)時,調(diào)用方將把實參變量的引用賦給相對應(yīng)的形參變量。實參變量的引用代表數(shù)據(jù)值的內(nèi)存地址,因此,形參變量和實參變量將指向同一個引用。如果在方法內(nèi)部更改了形參變量所引用的數(shù)據(jù)值,則同時也修改了實參變量所引用的數(shù)據(jù)值。由于使用return語句一次只能返回一個數(shù)據(jù),如果需要返回多個數(shù)據(jù),則可以利用引用型參數(shù)的這個特點來實現(xiàn)。C#通過ref關(guān)鍵字來聲明引用參數(shù),無論是形參還是實參,只要希望傳遞數(shù)據(jù)的引用,就必須添加ref關(guān)鍵字。輸出參數(shù)方法中的return語句只能返回一個運算結(jié)果,雖然也可以使用引用型參數(shù)返回計算結(jié)果,但要求先初始化實參。而輸出參數(shù)不需要對實參進行初始化,它

7、專門用于把方法中的數(shù)據(jù)通過形參返回給實參,但不會將實參的值傳遞給形參。一個方法中可允許有多個輸出參數(shù)。C#通過out關(guān)鍵字來聲明輸出參數(shù),無論是形參還是實參,只要是輸出參數(shù),都必須添加out關(guān)鍵字。數(shù)組型參數(shù)把數(shù)組作為參數(shù),有兩種使用形式:一種是在形參數(shù)組前不添加params修飾符另一種是在形參數(shù)組前添加params修飾符。兩種形式的區(qū)別不添加params修飾符時,所對應(yīng)的實參必須是一個數(shù)組名。添加params修飾符時,所對應(yīng)的實參可以是數(shù)組名,也可以是數(shù)組元素值的列表。值得注意的是,無論采用哪一種形式,形參數(shù)組都不能定義數(shù)組長度。方法的重載方法的重載是指在同一個類型中,以同樣的名稱聲明兩個或

8、多個方法。當(dāng)需要以不同的參數(shù)列表執(zhí)行同樣的操作時,方法重載將會很有用。2. 析構(gòu)函數(shù)的特點:(1) 不能在結(jié)構(gòu)中定義析構(gòu)函數(shù),只能對類使用析構(gòu)函數(shù);(2) 一個類只能有一個析構(gòu)函數(shù);(3) 無法繼承或重載析構(gòu)函數(shù);(4) 析構(gòu)函數(shù)既沒有修飾符,也沒有參數(shù);(5) 在析構(gòu)函數(shù)被調(diào)用時,.Net Framework的CLR自動添加對基類Object.Finalize方法的調(diào)用以清理現(xiàn)場,因此在析構(gòu)函數(shù)中不能包含對Object.Finalize方法的調(diào)用。注意,在默認(rèn)情況下,編譯器自動生成空的析構(gòu)函數(shù),因此C#不允許定義空的析構(gòu)函數(shù)1. 靜態(tài)類的定義:靜態(tài)類使用static關(guān)鍵字來聲明,表明它僅包含

9、靜態(tài)成員。不能使用new關(guān)鍵字創(chuàng)建靜態(tài)類的實例 。在實際應(yīng)用中,當(dāng)類中的成員不與特定對象關(guān)聯(lián)的時候,就可以把它創(chuàng)建為靜態(tài)類。2. 靜態(tài)類的主要功能:(1) 靜態(tài)類僅包含靜態(tài)成員;(2) 靜態(tài)類不能被實例化;(3) 靜態(tài)類是密封的;(4) 靜態(tài)類不能包含實例構(gòu)造函數(shù)。3. 靜態(tài)類的優(yōu)點:(1) 編譯器能夠自動執(zhí)行檢查,以確保不添加實例成員;(2) 靜態(tài)類能夠使程序的實現(xiàn)更簡單、迅速,因為不必創(chuàng)建對象就能調(diào)用其方法。注意:因為靜態(tài)類是密封的,因此不可被繼承。另外,靜態(tài)類不能包含實例構(gòu)造函數(shù),但仍可以聲明靜態(tài)構(gòu)造函數(shù),以分配初始值或設(shè)置某個靜態(tài)狀態(tài)。(1) 派生類的特點可以擁有自己的成員。可以隱式地

10、從基類繼承所有成員,包括方法、字段、屬性和事件,但私有成員、構(gòu)造函數(shù)和析構(gòu)函數(shù)等除外。派生類只能從一個類中繼承密封類使用密封類可以阻止一個類的代碼被其他類繼承使用密封類的好處:可以提高應(yīng)用程序的可靠性和性能(在.NET Framework公共語言運行時CLR中,加載密封類時將對密封類的方法調(diào)用進行優(yōu)化)。軟件企業(yè)通過使用密封類還可以把自己的知識產(chǎn)權(quán)保護起來,避免他人共享代碼。在C#中,添加關(guān)鍵字sealed可以聲明密封類。4.為了使用派生類能更改基類的數(shù)據(jù)和行為,C#提供了兩種選擇:1使用新的派生類成員替換基成員2. 重寫虛擬的基成員 使用virtual和override時要注意以下幾點:(1

11、)字段不能是虛擬的,只有方法、屬性、事件和索引器才可以是虛擬的;(2)使用virtual修飾符后,不允許再使用static、abstract或override修飾符;(3)派生類對象即使被強制轉(zhuǎn)換為基類對象,所引用的仍然是派生類的成員;(4)派生類可以通過密封來停止虛擬繼承,此時派生類的成員使用sealed override聲明。抽象類的特點:抽象類是用來作為基類的,不能直接實例化,而且只能使用abstract關(guān)鍵字來標(biāo)識。抽象類的用途是提供多個派生類可共享的基類的公共定義。抽象類可以包含抽象的成員,如抽象屬性和抽象方法,也可以包含非抽象的成員,甚至還可以包含虛方法。抽象屬性的特點類的屬性成員

12、添加了abstract關(guān)鍵字后,就成了抽象屬性。抽象屬性聲明不提供屬性訪問器的實現(xiàn),它只聲明該類支持的屬性,而將訪問器的實現(xiàn)留給派生類。抽象屬性同樣可以是只讀的、只寫的或可讀寫的屬性。當(dāng)派生類從抽象類中繼承一個抽象屬性時,派生類必須重載該抽象屬性。抽象屬性使用abstract關(guān)鍵字來標(biāo)識抽象方法的特點:類的方法成員添加abstract關(guān)鍵字后,就成為抽象方法。抽象方法聲明不提供方法的實現(xiàn),它必須是一個空方法,而將方法實現(xiàn)留給派生類。當(dāng)派生類從抽象類中繼承一個抽象方法時,派生類必須重載該抽象方法。由于抽象方法沒有實現(xiàn),因此,抽象方法不包含常規(guī)的方法體,以分號結(jié)尾。1.委托(delegate)是一

13、種引用方法的類型,它與類、接口和數(shù)組相同,屬于引用型。在C#程序中,可以聲明委托類型、定義委托類型的變量、把方法分配給委托變量,還可以通過委托來間接地調(diào)用一個或多個方法。一旦為委托分配了方法,委托將與該方法具有完全相同的行為。C#允許把任何具有相同簽名(相同的返回值和參數(shù))的方法分配給委托變量。委托的實質(zhì)是代表方法的引用(即內(nèi)存地址),是定義回調(diào)方法的理想選擇,也是C#實現(xiàn)事件驅(qū)動的編程模型的主要途徑。委托具有以下特點:(1)委托類似于 C+ 函數(shù)指針,是完全面向?qū)ο蟮?,是安全的?shù)據(jù)類型。(2)委托允許將方法作為參數(shù)進行傳遞。(3)委托可用于定義回調(diào)方法。(4)委托可以鏈接在一起。例如,可以對

14、一個事件調(diào)用多個方法。(5)委托簽名不需要與方法精確匹配。集合是通過高度結(jié)構(gòu)化的方式存儲任意對象的類,與無法動態(tài)調(diào)整大小的數(shù)組相比,集合不僅能隨意調(diào)整大小,而且對存儲或檢索存儲在其中的對象提供了更高級的方法。集合可以把一組類似的類型化對象組合在一起。選擇集合類時,一般要考慮以下問題:(1)是否需要一個序列列表,需要先進先出行為時可使用 Queue 隊列類,在需要后進先出行為時可使用 Stack棧類。(2)是否需要隨機訪問集合中的元素,此時不能選擇Queue 隊列類、Stack棧類、LinkedList 雙向鏈表類。(3)是否需要通過索引訪問每個元素,只有ArrayList動態(tài)數(shù)組類、Strin

15、gCollection字符串集合類等是從索引為零的元素開始逐個訪問集合元素。Hashtable哈希表、Dictionary字典類通過元素的鍵(即元素名字)提供對元素的訪問。而NameValueCollection 類和SortedList 泛型類通過其元素的從零開始的索引,或者通過其元素的鍵提供對元素的訪問。(4)是否包含一個值、一個鍵和一個值的集合,還是一個鍵和多個值的集合。其中,“一個值”的集合是一種基于 IList 列表接口派生的集合,“一個鍵和一個值”的集合是一種基于IDictionary字典接口的集合,“一個鍵和多個值”的集合是 NameValueCollection 類。(5)是否

16、需要用與輸入元素方式不同的方式對元素排序。Hashtable 哈希表類按其元素的哈希代碼對元素排序,SortedList有序表類以及 SortedDictionary有序字典根據(jù) IComparer 可比較接口來實現(xiàn)按鍵對元素的排序,而ArrayList動態(tài)數(shù)組類提供 Sort 排序方法。(6)是否需要信息的快速搜索和檢索,對于小集合(10個元素或更少),ListDictionary 比 Hashtable 快,SortedDictionary 泛型類提供比 Dictionary 泛型類更快的查找。(7)是否需要只接受字符串的集合,如使用StringCollection和 StringDict

17、ionary等。動態(tài)數(shù)組類ArrayList不限制元素的個數(shù)和數(shù)據(jù)類型。(1) ArrayList與Array的區(qū)別Array 的大小是固定的,而 ArrayList的大小可根據(jù)需要自動擴充;在Array中一次只能獲取或設(shè)置一個元素的值,而在ArrayList中允許添加、插入或移除某一范圍的元素;Array 的下限可以自定義,而ArrayList的下限始終為零;Array 可以具有多個維度,而 ArrayList始終只是一維的;Array 位于 System 命名空間中,ArrayList 位于 System.Collections 命名空間中。(2) 創(chuàng)建動態(tài)數(shù)組:ArrayList 列表對

18、象名 = new ArrayList(?);隊列的特點一種先進先出的數(shù)據(jù)結(jié)構(gòu),當(dāng)插入或刪除對象時,對象從隊列的一端插入,從另外一端移除創(chuàng)建隊列對象Queue 隊列名 = new Queue(隊列長度,增長因子);說明,隊列長度默認(rèn)為32,增長因子默認(rèn)為2.0(即每當(dāng)隊列容量不足時,隊列長度調(diào)整為原來的2倍)注意,由于調(diào)整隊列的大小需要付出一定的性能代價,因此建議在構(gòu)造隊列時指定隊列的長度。常用隊列操作方法包括Enqueue向隊尾添加數(shù)據(jù)、Dequeue移除隊頭數(shù)據(jù)、Peek返回隊頭數(shù)據(jù)、Clear清空隊列和Contains檢查是否包含某個數(shù)據(jù)等。其中,Enqueue和Dequeue每操作一次只

19、能添加或刪除一個數(shù)據(jù)。棧的特點:一種先進后出的數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)在插入或刪除對象時,只能在棧頂插入或刪除。創(chuàng)建棧對象:Stack 棧名 = new Stack(?);棧常用方法包括Push在棧頂添加數(shù)據(jù)、Pop移除棧頂數(shù)據(jù)、Peek返回棧頂數(shù)據(jù)、Clear清空棧和Contain檢查是否包含某個數(shù)據(jù)等。其中,Push和Pop每操作一次只能添加或刪除一個數(shù)據(jù)。哈希表又稱散列表,表示鍵/值對的集合。哈希表的特點:在保存集合元素時,首先要根據(jù)鍵自動計算哈希代碼,以確定該元素的保存位置,再把元素的值放入相應(yīng)位置所指向的存儲桶中。查找時,再次通過鍵所對應(yīng)的哈希代碼到特定存儲桶中搜索。這樣可以大大減少為

20、查找一個元素進行的比較次數(shù)。創(chuàng)建哈希表對象Hashtable 哈希表名 = new Hashtable(哈希表長度,增長因子);說明,默認(rèn)長度為0,默認(rèn)增長因子為1.0哈希表常用操作方法包括Add添加數(shù)據(jù)、Remove移除數(shù)據(jù)、Clear清空哈希表和Contains檢查是否包含某個數(shù)據(jù)等。其中, Add方法需要兩個參數(shù),一個是鍵,一個是值;Remove方法只需要一個鍵名參數(shù)。接口索引器與類索引器的區(qū)別有兩個:一是接口索引器不使用修飾符;二是接口索引器只包含訪問器get或set,沒有實現(xiàn)語句。創(chuàng)建自定義的泛型類時,需要特別注意以下事項:(1)將哪些類型通用化為類型參數(shù)一般規(guī)則是:能夠參數(shù)化的類型

21、越多,代碼就會變得越靈活,重用性就越好,但太多的通用化會使其他開發(fā)人員難以閱讀或理解代碼。(2)如果存在約束,應(yīng)對類型參數(shù)應(yīng)用什么約束一般規(guī)則是:應(yīng)用盡可能最多的約束,但仍能夠處理需要處理的類型。例如,如果知道泛型類僅用于引用類型,則應(yīng)用類約束。這可以防止泛型類被意外地用于值類型。(3)是否將泛型行為分解為基類和子類由于泛型類可以作為基類使用,其注意事項與非泛型類相同。(4)是否實現(xiàn)一個或多個泛型接口。事件處理系統(tǒng)的構(gòu)成要素(1) 事件源:指能觸發(fā)事件的對象,有時又稱為事件的發(fā)送者或事件的發(fā)布者;(2) 偵聽器:指能接收到事件消息的對象,Windows提供了基礎(chǔ)的事件偵聽服務(wù);(3) 事件處理

22、程序:當(dāng)事件發(fā)生時對事件進行處理,又稱事件函數(shù)或事件方法,包含事件處理程序的對象稱為事件的接收者,又稱事件的訂閱者。C#中的事件具有以下特點:(1) 事件是類用來通知對象需要執(zhí)行某種操作的方式;(2) 盡管事件在其他時候(如信號狀態(tài)更改)也很有用,但通常還是用在圖形用戶界面中;(3) 事件通常使用委托事件處理程序進行聲明;(4) 事件可以調(diào)用匿名方法來替代委托。1. 事件的基本概念觸發(fā)事件的對象稱為發(fā)布者,提供事件處理程序的對象稱為訂閱者。在.NET Framework中,基于事件驅(qū)動的程序使用委托來綁定事件和事件函數(shù),在C#中,事件實際上就是一個委托類型的變量。C#允許使用內(nèi)置的EventHandler委托類型來聲明一個標(biāo)準(zhǔn)的事件,也允許先自定義委托,再聲明自定義事件。在.NET Framework中,內(nèi)置的EventHandler委托具有兩個參數(shù),它們的數(shù)據(jù)類型分別是Object

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論