![c#第四章 面向?qū)ο缶幊蘝第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/17f4f225-af8b-41bf-9660-e67bf2e2d212/17f4f225-af8b-41bf-9660-e67bf2e2d2121.gif)
![c#第四章 面向?qū)ο缶幊蘝第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/17f4f225-af8b-41bf-9660-e67bf2e2d212/17f4f225-af8b-41bf-9660-e67bf2e2d2122.gif)
![c#第四章 面向?qū)ο缶幊蘝第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/17f4f225-af8b-41bf-9660-e67bf2e2d212/17f4f225-af8b-41bf-9660-e67bf2e2d2123.gif)
![c#第四章 面向?qū)ο缶幊蘝第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/17f4f225-af8b-41bf-9660-e67bf2e2d212/17f4f225-af8b-41bf-9660-e67bf2e2d2124.gif)
![c#第四章 面向?qū)ο缶幊蘝第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/17f4f225-af8b-41bf-9660-e67bf2e2d212/17f4f225-af8b-41bf-9660-e67bf2e2d2125.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第四章第四章 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?(4、5章章) 一、類的構(gòu)建及使用一、類的構(gòu)建及使用 二、類的方法參數(shù)的傳遞二、類的方法參數(shù)的傳遞 三、類的繼承三、類的繼承 四、其它四、其它一、一、 類的構(gòu)建及使用類的構(gòu)建及使用1.1 1.1 類的構(gòu)建類的構(gòu)建我們已經(jīng)簡單介紹過類的基本結(jié)構(gòu)我們已經(jīng)簡單介紹過類的基本結(jié)構(gòu)P66 例例4-1 該項目中包含該項目中包含2個類,注意前一個類沒有個類,注意前一個類沒有main 方法。方法。如何在一個項目中添加多個類?如何在一個項目中添加多個類?建立新項目后建立新項目后,可以新建類,也可將現(xiàn)有可以新建類,也可將現(xiàn)有的類直接的類直接 添加進來。添加進來。注意注意:如
2、果添加一個現(xiàn)有的類,代碼中可:如果添加一個現(xiàn)有的類,代碼中可能出現(xiàn)找不到某個類的問題,需要對引用能出現(xiàn)找不到某個類的問題,需要對引用的類添加引用。的類添加引用。關(guān)于構(gòu)造函數(shù)(構(gòu)造方法)關(guān)于構(gòu)造函數(shù)(構(gòu)造方法)基本上和基本上和 Java 一樣,一般聲明為一樣,一般聲明為 public如果沒有自己聲明的構(gòu)造方法,系統(tǒng)會自動如果沒有自己聲明的構(gòu)造方法,系統(tǒng)會自動提供一個默認構(gòu)造方法對類進行初始化。提供一個默認構(gòu)造方法對類進行初始化。構(gòu)造方法與類同名,沒有返回值。構(gòu)造方法與類同名,沒有返回值。支持重載,可以聲明多個構(gòu)造方法。支持重載,可以聲明多個構(gòu)造方法。本書中將類的屬性(或成員變量)稱為本書中將類的
3、屬性(或成員變量)稱為“字字段段”,我們課中一般稱為,我們課中一般稱為“成員變量成員變量”或或“屬性屬性”。成員變量的默認初始化:數(shù)值類型為成員變量的默認初始化:數(shù)值類型為 0;bool 類型為類型為 false;引用類型為;引用類型為 null。靜態(tài)成員與實例成員靜態(tài)成員與實例成員和和 Java 類似,類的成員(屬性、方類似,類的成員(屬性、方法等)同樣分為靜態(tài)(類)成員與法等)同樣分為靜態(tài)(類)成員與實例成員。實例成員。通過通過 static 關(guān)鍵字聲明靜態(tài)成員。關(guān)鍵字聲明靜態(tài)成員。靜態(tài)成員通過類名直接調(diào)用。靜態(tài)成員通過類名直接調(diào)用。訪問修飾符訪問修飾符C# 對成員的訪問修飾符比對成員的訪
4、問修飾符比 Java 多一些。多一些。除了常見的除了常見的 public、private 類成員修飾符,類成員修飾符,C# 還有還有static、const、readonly、protected,internal 、sealed 等類成員修飾符。等類成員修飾符。以下三個是最常用的:以下三個是最常用的:Public:所有類都可訪問。所有類都可訪問。private(默認):(默認):只能本類訪問,外部無法存只能本類訪問,外部無法存取。取。protected:本類或其派生類可訪問本類或其派生類可訪問其它類成員修飾符其它類成員修飾符 Internal :當前項目中都可以訪問。當前項目中都可以訪問。 該
5、訪問權(quán)限一般用于基于組件的開發(fā),可以使該訪問權(quán)限一般用于基于組件的開發(fā),可以使組件以私有方式工作,而該項目外的其它代碼組件以私有方式工作,而該項目外的其它代碼無法訪問。無法訪問。Protected internal :當前項目或項目中類當前項目或項目中類的子類。的子類。 Partial:局部類型,類的定義和實現(xiàn)可分局部類型,類的定義和實現(xiàn)可分布在不同文件中。很少使用,目前不必了布在不同文件中。很少使用,目前不必了解。解。sealed:用它修飾的類或方法不能被繼承用它修飾的類或方法不能被繼承 static:修飾靜態(tài)成員修飾靜態(tài)成員 const 與與 readonly :聲明常量,前面已講過聲明常
6、量,前面已講過由于由于 const 隱含是隱含是 static 的,必須聲明時初的,必須聲明時初始化。始化。1.2 方法及方法的重載方法及方法的重載 C# 中方法重載的概念和寫法與中方法重載的概念和寫法與 Java 中中方法重載類似。方法重載類似。請注意重載和覆蓋的區(qū)別請注意重載和覆蓋的區(qū)別函數(shù)重載的好處是使完成相似任務(wù)的方函數(shù)重載的好處是使完成相似任務(wù)的方法具有一致的外觀,便于理解和復用法具有一致的外觀,便于理解和復用主要體現(xiàn)在參數(shù)列表上的差異主要體現(xiàn)在參數(shù)列表上的差異 1.3 屬性過程屬性過程 get / set 先看看例先看看例 4-11 中的一段代碼:中的一段代碼:public cla
7、ss MyClass private int gread = 0; public int Gread get return gread ; set if (value = 0 & value = 100) gread = value ; /value是關(guān)鍵字,其值由編譯器自動生成。是關(guān)鍵字,其值由編譯器自動生成。 其中定義了私有其中定義了私有(private)屬性屬性 gread由于是私有的,對其它類是不可見的由于是私有的,對其它類是不可見的隨后隨后定義了定義了公用屬性過程公用屬性過程 Gread (注意大注意大小寫的差別小寫的差別),),它們規(guī)定了對屬性值的處它們規(guī)定了對屬性值的處理
8、方式。理方式。屬性過程也是類的屬性屬性過程也是類的屬性 。通過通過屬性過程,屬性過程,提供了對上述私有屬性的提供了對上述私有屬性的訪問方法。訪問方法。問題問題 為什么這樣處理?為什么這樣處理?一共有多少屬性?一共有多少屬性?答案:答案:2個,個,1 個私有屬性個私有屬性,1 個公用屬性過程個公用屬性過程 屬性過程的屬性過程的 get 與與 set 兩個兩個“子過程子過程”,是否必須成對出現(xiàn)?是否必須成對出現(xiàn)?是不是要為每一個屬性都寫個屬性過程?是不是要為每一個屬性都寫個屬性過程? 屬性過程的使用屬性過程的使用 其使用與普通屬性一樣其使用與普通屬性一樣 ,可以通過對象名,可以通過對象名來調(diào)用來調(diào)
9、用例如:例如:對象名對象名. Gread = 60 ; /寫屬性值寫屬性值,如果超出范圍如果超出范圍, 屬性過程自動屬性過程自動置置 0 mygread = 對象名對象名. Gread ; /讀屬性值讀屬性值 簡單聲明方式(自動實現(xiàn)屬性)簡單聲明方式(自動實現(xiàn)屬性)public int Age get ; private set ; /注意,此處注意,此處 Age 是一個只讀屬性。是一個只讀屬性。1.4 this 引用引用指代當前對象,使用與指代當前對象,使用與 Java 類似類似實際上我們調(diào)用任何對象的方法或?qū)傩?,實際上我們調(diào)用任何對象的方法或?qū)傩裕贾付贾浮爱斍皩ο螽斍皩ο蟆?,也就是說都有
10、一個隱,也就是說都有一個隱含的含的 this,只是通常不必在代碼中只是通常不必在代碼中強調(diào)而強調(diào)而已已只有當需明確指出:我要引用當前對象時,只有當需明確指出:我要引用當前對象時,才使用才使用 this 1.5 索引器索引器索引器用于封裝內(nèi)部集合或數(shù)組。索引器用于封裝內(nèi)部集合或數(shù)組。索引器在語法上方便了程序員將類、結(jié)構(gòu)索引器在語法上方便了程序員將類、結(jié)構(gòu)或接口作為數(shù)組進行訪問。或接口作為數(shù)組進行訪問。要聲明類或結(jié)構(gòu)上的索引器,需要使用要聲明類或結(jié)構(gòu)上的索引器,需要使用this 關(guān)鍵字。關(guān)鍵字。例如:例如:public int this int index / 索引器聲明索引器聲明 / get a
11、nd set accessors例題例題: P78 4-12 索引器的聲明和用法索引器的聲明和用法二、類的方法參數(shù)的傳遞二、類的方法參數(shù)的傳遞- 值類型與引用類型值類型與引用類型 2.1 類的方法參數(shù)傳遞類的方法參數(shù)傳遞 方法的形參有方法的形參有傳值傳值調(diào)用和調(diào)用和引用引用調(diào)用。前者調(diào)用。前者傳一個變量副本,變量副本的值改變不影傳一個變量副本,變量副本的值改變不影響原變量;后者傳一個變量地址,會改變響原變量;后者傳一個變量地址,會改變原變量的值。原變量的值。與與C+不同,這里變量地址不叫指針,而不同,這里變量地址不叫指針,而叫引用,引用有叫引用,引用有 ref 和和 out 兩個關(guān)鍵字。兩個關(guān)
12、鍵字。 ref 引用與引用與 out 引用引用 無論無論 ref 還是還是 out 引用,都可以使方法返回引用,都可以使方法返回多個參數(shù)的值,這是由引用的特性決定的。多個參數(shù)的值,這是由引用的特性決定的。兩種引用的區(qū)別:分別為方法兩種引用的區(qū)別:分別為方法輸入輸入或或輸出輸出參參數(shù)數(shù)ref:修改原變量的值,修改原變量的值,參數(shù)要求參數(shù)要求有初值有初值 是函數(shù)的輸入?yún)?shù),在函數(shù)內(nèi)部的任何改變,是函數(shù)的輸入?yún)?shù),在函數(shù)內(nèi)部的任何改變,都將影響函數(shù)外部該參數(shù)的值。都將影響函數(shù)外部該參數(shù)的值。 out:修改原變量的值,修改原變量的值,參數(shù)參數(shù)可以無初值可以無初值 目的在于獲取函數(shù)的返回值,是輸出參數(shù),
13、目的在于獲取函數(shù)的返回值,是輸出參數(shù),必必須在函數(shù)內(nèi)部對該參數(shù)賦值須在函數(shù)內(nèi)部對該參數(shù)賦值,這將沖掉函數(shù)外,這將沖掉函數(shù)外部的任何賦值,使得函數(shù)外部賦值毫無意義。部的任何賦值,使得函數(shù)外部賦值毫無意義。out 引用的例子引用的例子P73 例題例題 4-8class Program public static void MyMethod(out int a, out int b) a = 5; b = 6; /函數(shù)中賦值函數(shù)中賦值 static void Main() int x, y; MyMethod( out x, out y ); /引用時無初值引用時無初值 Console.WriteL
14、ine (調(diào)用調(diào)用MyMethod后,后,x=0,y=1, x, y); Console.ReadLine(); params 關(guān)鍵字關(guān)鍵字當為方法傳遞的參數(shù)個數(shù)不確定時,可以使當為方法傳遞的參數(shù)個數(shù)不確定時,可以使用用 params 關(guān)鍵字來聲明參數(shù)。關(guān)鍵字來聲明參數(shù)。在方法聲明中的在方法聲明中的 params 關(guān)鍵字之后不允許關(guān)鍵字之后不允許任何其他參數(shù),并且在方法聲明中只允許一任何其他參數(shù),并且在方法聲明中只允許一個個 params 關(guān)鍵字。關(guān)鍵字。例如:例如:public void UseParams(params int list) . 你可以簡單地理解為用一個你可以簡單地理解為用一
15、個不定長數(shù)組不定長數(shù)組做參做參數(shù),調(diào)用方法時多個參數(shù)用數(shù),調(diào)用方法時多個參數(shù)用“,”分隔。分隔。2.2 值類型與引用類型值類型與引用類型C/C+有指針類型有指針類型,而數(shù)組而數(shù)組、結(jié)構(gòu)體結(jié)構(gòu)體、類類 這些數(shù)據(jù)類型本質(zhì)上都是指針這些數(shù)據(jù)類型本質(zhì)上都是指針。因此因此C/C+ 數(shù)據(jù)類型可劃分為數(shù)據(jù)類型可劃分為基本類型基本類型和指和指針類型針類型兩兩大類大類 從從 C# 類的方法參數(shù)傳遞我們看到,引用類的方法參數(shù)傳遞我們看到,引用實際上就是指針的改頭換面實際上就是指針的改頭換面 。C# 數(shù)據(jù)類型也可劃分為數(shù)據(jù)類型也可劃分為值類型值類型和和引用類型引用類型兩大類兩大類, 但它和但它和C/C+有所不同有所
16、不同, C#所有數(shù)所有數(shù)據(jù)類型都是據(jù)類型都是對象對象化的化的, 也就是說都是類也就是說都是類但類也有不同但類也有不同, , 它們在內(nèi)存中的位置和引它們在內(nèi)存中的位置和引用方法可以是不一樣的用方法可以是不一樣的 按值類型和引用類型劃分按值類型和引用類型劃分 值類型值類型的數(shù)據(jù)類型:基本數(shù)據(jù)類型、枚舉的數(shù)據(jù)類型:基本數(shù)據(jù)類型、枚舉引用類型引用類型的數(shù)據(jù)類型:數(shù)組、類的數(shù)據(jù)類型:數(shù)組、類混合類型混合類型的數(shù)據(jù)類型:結(jié)構(gòu)的數(shù)據(jù)類型:結(jié)構(gòu) 值類型對象存放在內(nèi)存的值類型對象存放在內(nèi)存的棧棧中,而引用類中,而引用類型對象放在內(nèi)存的型對象放在內(nèi)存的堆堆中,棧的效率高于堆中,棧的效率高于堆 對象實例化的語法有所
17、不同,實例化值類對象實例化的語法有所不同,實例化值類型對象型對象不需要不需要 new 操作符,實例化引用類操作符,實例化引用類型對象則型對象則需要需要 new 操作符操作符 三、類的繼承三、類的繼承 建立一個新類時,可以讓新類繼承其它類的建立一個新類時,可以讓新類繼承其它類的方法和屬性。方法和屬性。C# 中用中用 “ “:”表示繼承表示繼承例如:例如:class MyClass :BaseClass被繼承的類叫被繼承的類叫基類基類,新類叫,新類叫派生類(本書常派生類(本書常稱為擴充類)稱為擴充類)派生類自動獲得基類的方法和屬性,還可以派生類自動獲得基類的方法和屬性,還可以自已添加新的方法和屬性
18、。自已添加新的方法和屬性??梢栽诒3址椒趾徒涌冢▍?shù))不變的可以在保持方法名字和接口(參數(shù))不變的前提下,覆蓋基類的方法前提下,覆蓋基類的方法 。3.1 繼承繼承 中注意的幾個問題中注意的幾個問題派生類不能訪問基類的派生類不能訪問基類的 private 成員成員間接繼承:間接繼承:2 級或以上的繼承關(guān)系級或以上的繼承關(guān)系Object 類是所有類的直接或間接基類類是所有類的直接或間接基類派生類對象也是基類對象派生類對象也是基類對象不支持類的多重繼承不支持類的多重繼承可以通過接口(可以通過接口(interface)間接實現(xiàn)多重間接實現(xiàn)多重繼承。繼承。3.2 基類和派生類的構(gòu)造函數(shù)基類和派生類的
19、構(gòu)造函數(shù)構(gòu)造函數(shù)不能被繼承(但可通過關(guān)鍵字構(gòu)造函數(shù)不能被繼承(但可通過關(guān)鍵字base 進行調(diào)用),原因在于基類的某些進行調(diào)用),原因在于基類的某些成員可能無法訪問。成員可能無法訪問。派生類被實例化成對象時,派生類被實例化成對象時,先調(diào)用基類構(gòu)先調(diào)用基類構(gòu)造函數(shù),再調(diào)用派生類構(gòu)造函數(shù)造函數(shù),再調(diào)用派生類構(gòu)造函數(shù)。 繼承關(guān)系中,當使用帶參數(shù)的構(gòu)造方法繼承關(guān)系中,當使用帶參數(shù)的構(gòu)造方法進行初始化時,有時可能會出現(xiàn)問題。進行初始化時,有時可能會出現(xiàn)問題。實例:實例:class A private int age;public A( int age ) this.age = age; class B :
20、 A private int age; public B(int age) this.age = age; 當我們使用當我們使用 B b = new B(10);這樣的這樣的語句創(chuàng)建語句創(chuàng)建 B 的實例時,會出現(xiàn)錯誤。的實例時,會出現(xiàn)錯誤。原因是系統(tǒng)找不到原因是系統(tǒng)找不到 A 的默認構(gòu)造方法。的默認構(gòu)造方法。解決辦法解決辦法可根據(jù)需要,常用兩種方法:可根據(jù)需要,常用兩種方法:為基類為基類 A 添加默認的構(gòu)造方法,如:添加默認的構(gòu)造方法,如: public A() this.age = 5; 或者在聲明或者在聲明 B 的實例時,向的實例時,向 A 的構(gòu)造方法的構(gòu)造方法傳值用來初始化傳值用來初始化
21、 A 的成員。的成員。此時可以將此時可以將 B 的構(gòu)造方法的構(gòu)造方法 public B(int age)改寫為:改寫為: public B(int age) :base(age) 注意,這里的注意,這里的“:”不是繼承,而是表示不是繼承,而是表示將參數(shù)將參數(shù) age 傳遞給傳遞給 A 的構(gòu)造方法。的構(gòu)造方法。例題:例題: P88 例例 5-5 3.3 派生類對基類方法的覆蓋派生類對基類方法的覆蓋 覆蓋:在派生類用與基類相同的方法名和參覆蓋:在派生類用與基類相同的方法名和參數(shù)表寫一個新方法數(shù)表寫一個新方法 ,是,是多態(tài)性多態(tài)性的體現(xiàn)。的體現(xiàn)。覆蓋只對派生類和派生類的派生類有效,對覆蓋只對派生類和
22、派生類的派生類有效,對基類無效基類無效 ?;惖姆椒ū匦杪暶鳛榛惖姆椒ū匦杪暶鳛?virtual(P82 ),表示該方法(或?qū)傩裕┛梢员桓采w。表示該方法(或?qū)傩裕┛梢员桓采w。覆蓋時派生類的方法必需聲明為覆蓋時派生類的方法必需聲明為 override 派生類的方法名和參數(shù)表必需與基類一致派生類的方法名和參數(shù)表必需與基類一致派生類用關(guān)鍵字派生類用關(guān)鍵字 base .方法名方法名( ),可以調(diào)用,可以調(diào)用基類被覆蓋的方法。基類被覆蓋的方法。虛擬虛擬(virtual)方法應(yīng)注意的問題方法應(yīng)注意的問題基類中聲明為基類中聲明為 virtual 的方法,并的方法,并不不強制在強制在派生類中一定要進行覆蓋(
23、派生類中一定要進行覆蓋( override )。)。虛擬方法不能是虛擬方法不能是 static 的,也不能是的,也不能是 private 的。為什么?的。為什么?覆蓋時,方法的名稱、參數(shù)個數(shù)、類型、覆蓋時,方法的名稱、參數(shù)個數(shù)、類型、返回值等都必須和虛擬方法一致。返回值等都必須和虛擬方法一致。方法的覆蓋與重載的關(guān)系方法的覆蓋與重載的關(guān)系 是容易混淆的兩個概念是容易混淆的兩個概念方法的覆蓋和重載有關(guān)系么?方法的覆蓋和重載有關(guān)系么?沒有任何關(guān)系!沒有任何關(guān)系!重載,即用同一個方法名,不同的參數(shù),重載,即用同一個方法名,不同的參數(shù),寫寫 N 個方法個方法 覆蓋,覆蓋, 相同相同方法名和參數(shù)重寫一個方
24、法方法名和參數(shù)重寫一個方法重載是在一個類里進行的,和繼承無關(guān)重載是在一個類里進行的,和繼承無關(guān)覆蓋是在基類和派生類之間進行的,與覆蓋是在基類和派生類之間進行的,與繼承有關(guān)。繼承有關(guān)。3.4 隱藏(隱藏(new)在派生類中,可以使用在派生類中,可以使用 new 關(guān)鍵字來隱藏基關(guān)鍵字來隱藏基類中的同名方法。類中的同名方法。其本質(zhì)也是覆蓋,與其本質(zhì)也是覆蓋,與 override 有何區(qū)別?有何區(qū)別?基類中只有基類中只有聲明為聲明為 virtual 的方法才允許用的方法才允許用override 進行覆蓋。進行覆蓋。如果基類中的方法沒有用如果基類中的方法沒有用 virtual 進行進行聲明,聲明,需要在
25、派生類中重寫該方法時,可以用需要在派生類中重寫該方法時,可以用 new 隱藏基類方法。隱藏基類方法??梢允褂藐P(guān)鍵字可以使用關(guān)鍵字 base 來調(diào)用被隱藏的方法。來調(diào)用被隱藏的方法。new 關(guān)鍵字提供了更加靈活的方式。可參見關(guān)鍵字提供了更加靈活的方式??蓞⒁?P84 例題例題 5-33.5 版本控制問題版本控制問題所謂版本控制,是指當對基類方法進行了所謂版本控制,是指當對基類方法進行了覆蓋或隱藏后,在調(diào)用方法時,系統(tǒng)如何覆蓋或隱藏后,在調(diào)用方法時,系統(tǒng)如何識別應(yīng)該使用哪個方法。識別應(yīng)該使用哪個方法。調(diào)用調(diào)用非虛擬方法非虛擬方法時不會受到版本的影響。時不會受到版本的影響。因為因為 new 隱藏的基
26、類方法,要調(diào)用基類方隱藏的基類方法,要調(diào)用基類方法,需要使用法,需要使用 base 才能調(diào)用。(才能調(diào)用。(編譯時編譯時)調(diào)用調(diào)用虛擬虛擬(virtual) 方法方法的實現(xiàn)部分可能會的實現(xiàn)部分可能會因擴充類的重寫而影響執(zhí)行結(jié)果。系統(tǒng)將因擴充類的重寫而影響執(zhí)行結(jié)果。系統(tǒng)將在在運行時運行時自動判斷使用哪個方法。自動判斷使用哪個方法。請大家自己仔細研究下請大家自己仔細研究下 P89 例題例題 5-63.6 抽象類與封閉類抽象類與封閉類抽象類抽象類:使用:使用 abstract 關(guān)鍵字聲明的類。關(guān)鍵字聲明的類。和和 Java 沒聲明區(qū)別,同樣只能被繼承,不沒聲明區(qū)別,同樣只能被繼承,不能實例化,子類必
27、須實現(xiàn)基類的抽象方法。能實例化,子類必須實現(xiàn)基類的抽象方法。封閉類封閉類:不能被其他類繼承的類,使用:不能被其他類繼承的類,使用 sealed 關(guān)鍵字進行聲明的類。關(guān)鍵字進行聲明的類。其實就是其實就是 Java 中的最終類(中的最終類(final)。)。也可用也可用 sealed 關(guān)鍵字聲明一個方法,這樣關(guān)鍵字聲明一個方法,這樣的方法即不能繼承,也不能被隱藏。的方法即不能繼承,也不能被隱藏。3.7 接口接口接口的寫法和類差不多,但它的成員接口的寫法和類差不多,但它的成員只有屬性和方法體,而沒有具體執(zhí)行只有屬性和方法體,而沒有具體執(zhí)行方式。方式。接口沒有接口沒有 public,private 等
28、修飾符,等修飾符,接口的屬性和方法接口的屬性和方法總是總是 public 的的 接口可以接口可以多多重繼承重繼承和和 Java 一樣,只是一樣,只是 C# 仍然用仍然用“:”繼承接口。繼承接口。接口的例子接口的例子interface Iabc / interface是關(guān)鍵字是關(guān)鍵字/屬性屬性int a,b,c;/方法方法bool MOVE( ););void RESET( );); 3.8、委托與事件、委托與事件委托委托和和事件事件這兩個概念需要搭配在一起這兩個概念需要搭配在一起來理解,它們配合起來協(xié)同工作。來理解,它們配合起來協(xié)同工作。這是兩個不好理解清楚,有些人多年也這是兩個不好理解清楚,
29、有些人多年也沒搞明白的東西沒搞明白的東西本書寫的比較簡單,但這個問題比較重本書寫的比較簡單,但這個問題比較重要,我希望能盡量給大家介紹清楚。要,我希望能盡量給大家介紹清楚。概念概念委托委托(delegate)是一種數(shù)據(jù)結(jié)構(gòu)(實際上)是一種數(shù)據(jù)結(jié)構(gòu)(實際上就是一個類),它提供類似就是一個類),它提供類似 C+中指針的功中指針的功能,使我們可以根據(jù)傳入的方法名稱,動態(tài)能,使我們可以根據(jù)傳入的方法名稱,動態(tài)決定將調(diào)用的方法。決定將調(diào)用的方法。事件事件(event)事件是相應(yīng)用戶操作或自動)事件是相應(yīng)用戶操作或自動執(zhí)行某個與事件關(guān)聯(lián)的方法的行為。執(zhí)行某個與事件關(guān)聯(lián)的方法的行為。事件需要通過委托類型來定
30、義。事件需要通過委托類型來定義。實際上就是要解決,當一件事發(fā)生時,交給實際上就是要解決,當一件事發(fā)生時,交給誰來處理的問題。誰來處理的問題。動物世界動物世界各種動物四處游蕩,覓食、嬉戲各種動物四處游蕩,覓食、嬉戲自然法則:自然法則: 餓了要吃飯餓了要吃飯 只吃對胃口的東西只吃對胃口的東西一只可愛的小鹿出現(xiàn)了?。ㄊ录┮恢豢蓯鄣男÷钩霈F(xiàn)了?。ㄊ录l(fā)生什么事?將會發(fā)生什么事? 獅子撲上去了獅子撲上去了 老虎撲上去了老虎撲上去了猴子在看熱鬧猴子在看熱鬧委托與事件委托與事件委托與事件的具體實現(xiàn)方法,見補充的委托與事件的具體實現(xiàn)方法,見補充的例題:例題:DelegateEvent上機作業(yè):完善該例
31、子上機作業(yè):完善該例子增加猴子的事件處理增加猴子的事件處理 如果出現(xiàn)小鹿,報警,讓小鹿快逃跑如果出現(xiàn)小鹿,報警,讓小鹿快逃跑 如果發(fā)現(xiàn)水果比如蘋果,猴子采摘老虎無視如果發(fā)現(xiàn)水果比如蘋果,猴子采摘老虎無視根據(jù)自己喜好,隨便再加些什么根據(jù)自己喜好,隨便再加些什么四、其它四、其它4.1 常用的名稱空間常用的名稱空間 Syetem:該名稱空間下最重要的類是該名稱空間下最重要的類是Object, .NET 所有的類及用戶自定義的所有的類及用戶自定義的類都繼承自該類,所有的數(shù)據(jù)類型(基本類都繼承自該類,所有的數(shù)據(jù)類型(基本型,字符型,數(shù)組型,字符型,數(shù)組)也都是該名程空間)也都是該名程空間的類的類 Syetem.Serialization:存放存放文件操作文件操作的類的類Syetem.Thread:存放存放多線
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)產(chǎn)品質(zhì)量保證咨詢服務(wù)合同
- 技術(shù)推廣合同
- 2024年高端醫(yī)療器械研發(fā)合同
- 電影票務(wù)銷售代理合同
- 碳足跡核算與管理服務(wù)合同
- 軟件開發(fā)測試服務(wù)合同
- 市場調(diào)研分析報告銷售合同
- 2025年中國酒店有償用品行業(yè)市場需求預測及投資戰(zhàn)略規(guī)劃報告
- 2025年中國支板門行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年中國鈸形頁輪行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 政治-湖北省湖部分名校(云學名校聯(lián)盟)2025屆高三1月聯(lián)考試題和答案
- YY/T 0681.2-2010無菌醫(yī)療器械包裝試驗方法第2部分:軟性屏障材料的密封強度
- GB/T 20472-2006硫鋁酸鹽水泥
- 煙氣管道阻力計算
- 城鄉(xiāng)環(huán)衛(wèi)一體化保潔服務(wù)迎接重大節(jié)日、活動的保障措施
- 醫(yī)院-9S管理共88張課件
- 高考作文復習:議論文論證方法課件15張
- MySQL數(shù)據(jù)庫項目式教程完整版課件全書電子教案教材課件(完整)
- 《網(wǎng)絡(luò)服務(wù)器搭建、配置與管理-Linux(RHEL8、CentOS8)(微課版)(第4版)》全冊電子教案
- 降“四高”健康教育課件
- 五十鈴、豐田全球化研究
評論
0/150
提交評論