第3章 類和結(jié)構(gòu)_第1頁
第3章 類和結(jié)構(gòu)_第2頁
第3章 類和結(jié)構(gòu)_第3頁
第3章 類和結(jié)構(gòu)_第4頁
第3章 類和結(jié)構(gòu)_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、教育部普通高等教育十二五國家級(jí)規(guī)劃教材教育部普通高等教育十二五國家級(jí)規(guī)劃教材C#程序設(shè)計(jì)及應(yīng)用教程程序設(shè)計(jì)及應(yīng)用教程第第3版版(包括簡(jiǎn)化版:(包括簡(jiǎn)化版:C#程序設(shè)計(jì)教程程序設(shè)計(jì)教程第第3版)版)第第3章章 類和結(jié)構(gòu)類和結(jié)構(gòu)2Ch3 類和結(jié)構(gòu)類和結(jié)構(gòu)3.1 自定義類自定義類(class)和結(jié)構(gòu)和結(jié)構(gòu)(struct)3.2 屬性和方法屬性和方法3.3 類的繼承與多態(tài)性類的繼承與多態(tài)性3.4 常用結(jié)構(gòu)和類的用法常用結(jié)構(gòu)和類的用法3.1 自定義類自定義類(class)和結(jié)構(gòu)和結(jié)構(gòu)(struct)l3.1.1 類的定義和成員組織類的定義和成員組織l3.1.2 訪問修飾符訪問修飾符l3.1.3 靜態(tài)成員

2、和實(shí)例成員靜態(tài)成員和實(shí)例成員l3.1.4 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)l3.1.5 字段和局部變量字段和局部變量l3.1.6 結(jié)構(gòu)的定義和成員組織結(jié)構(gòu)的定義和成員組織343.1.1 類的定義和成員組織類的定義和成員組織類類:定義對(duì)象具有的特征(字段、屬性等)和可執(zhí)行的操作(方定義對(duì)象具有的特征(字段、屬性等)和可執(zhí)行的操作(方法、事件等)。法、事件等)。 自定義類的常用形式自定義類的常用形式: 訪問修飾符訪問修飾符 static class 類名類名 : 基類基類 ,接口序列,接口序列 類成員類成員 類成員類成員:包括字段、屬性、構(gòu)造函數(shù)、方法、事件、運(yùn)算符、索包括字段、屬性、構(gòu)造函數(shù)

3、、方法、事件、運(yùn)算符、索引器、析構(gòu)函數(shù)等。引器、析構(gòu)函數(shù)等。53.1.2 訪問修飾符訪問修飾符類和類的成員都可以使用下面的訪問修飾符。類和類的成員都可以使用下面的訪問修飾符。lpublic:類的內(nèi)部和外部代碼都可以訪問。:類的內(nèi)部和外部代碼都可以訪問。lprivate:類的內(nèi)部可訪問,類的外部無法訪問。如果省略類成員的:類的內(nèi)部可訪問,類的外部無法訪問。如果省略類成員的訪問修飾符,默認(rèn)為訪問修飾符,默認(rèn)為private。linternal:同一個(gè)程序集中的代碼都可以訪問,程序集外的其他代碼:同一個(gè)程序集中的代碼都可以訪問,程序集外的其他代碼無法訪問。如果省略類的訪問修飾符,默認(rèn)為無法訪問。如果

4、省略類的訪問修飾符,默認(rèn)為internal。lprotected:類的內(nèi)部或者從該類繼承的子類可以訪問。:類的內(nèi)部或者從該類繼承的子類可以訪問。lprotected internal:從該類繼承的子類或者從另一個(gè)程序集中繼承:從該類繼承的子類或者從另一個(gè)程序集中繼承的類都可以訪問。的類都可以訪問。6partial修飾符修飾符:包含包含partial修飾符的類稱為分部類。修飾符的類稱為分部類。l可將類的定義分布在多個(gè)文件中,編譯器編譯帶有可將類的定義分布在多個(gè)文件中,編譯器編譯帶有partial修飾符的修飾符的類時(shí),會(huì)自動(dòng)將這些文件合并在一起。類時(shí),會(huì)自動(dòng)將這些文件合并在一起。l可可隔離自動(dòng)生成

5、的代碼和人工書寫的代碼隔離自動(dòng)生成的代碼和人工書寫的代碼?!纠?-1】 演示如何聲明類、字段、構(gòu)造函數(shù)和方法,同時(shí)說明如何實(shí)例化演示如何聲明類、字段、構(gòu)造函數(shù)和方法,同時(shí)說明如何實(shí)例化對(duì)象、如何使用分部類以及如何輸出實(shí)例數(shù)據(jù)。對(duì)象、如何使用分部類以及如何輸出實(shí)例數(shù)據(jù)。3.1.2 訪問修飾符訪問修飾符73.1.3 靜態(tài)成員和實(shí)例成員靜態(tài)成員和實(shí)例成員通過類名調(diào)用靜態(tài)成員,通過類名調(diào)用靜態(tài)成員,通過通過實(shí)例名調(diào)用實(shí)例成員。實(shí)例名調(diào)用實(shí)例成員。1. static關(guān)鍵字關(guān)鍵字l表示類或成員加載到內(nèi)存中只有一份,而不是有多個(gè)實(shí)例。當(dāng)垃圾回收器表示類或成員加載到內(nèi)存中只有一份,而不是有多個(gè)實(shí)例。當(dāng)垃圾回

6、收器檢測(cè)到不再使用該靜態(tài)成員時(shí),會(huì)自動(dòng)釋放其占用的內(nèi)存。檢測(cè)到不再使用該靜態(tài)成員時(shí),會(huì)自動(dòng)釋放其占用的內(nèi)存。l可用于類、字段、方法、屬性、運(yùn)算符、事件和構(gòu)造函數(shù),但不能用于索可用于類、字段、方法、屬性、運(yùn)算符、事件和構(gòu)造函數(shù),但不能用于索引器、析構(gòu)函數(shù)或者類以外的類型。引器、析構(gòu)函數(shù)或者類以外的類型。l靜態(tài)字段有兩個(gè)常見的用法:一是記錄已實(shí)例化對(duì)象的個(gè)數(shù),二是存儲(chǔ)必靜態(tài)字段有兩個(gè)常見的用法:一是記錄已實(shí)例化對(duì)象的個(gè)數(shù),二是存儲(chǔ)必須在所有實(shí)例之間共享的值。須在所有實(shí)例之間共享的值。l靜態(tài)方法可以被重載但不能被重寫,因?yàn)樗鼈儗儆陬?,而不屬于類的任何靜態(tài)方法可以被重載但不能被重寫,因?yàn)樗鼈儗儆陬?,?/p>

7、不屬于類的任何實(shí)例。實(shí)例。83.1.3 靜態(tài)成員和實(shí)例成員靜態(tài)成員和實(shí)例成員2. 靜態(tài)類靜態(tài)類聲明自定義類時(shí)如果加上聲明自定義類時(shí)如果加上static關(guān)鍵字,則該類就是靜態(tài)類。關(guān)鍵字,則該類就是靜態(tài)類。靜態(tài)類的主要特點(diǎn):靜態(tài)類的主要特點(diǎn):l僅包含靜態(tài)成員。僅包含靜態(tài)成員。l無法實(shí)例化。這與在非靜態(tài)類中定義私有構(gòu)造函數(shù)可阻止類被實(shí)例無法實(shí)例化。這與在非靜態(tài)類中定義私有構(gòu)造函數(shù)可阻止類被實(shí)例化的機(jī)制相似?;臋C(jī)制相似。l是密封的,因此不能被繼承。是密封的,因此不能被繼承。l不能包含實(shí)例構(gòu)造函數(shù),但可以包含靜態(tài)構(gòu)造函數(shù)。如果非靜態(tài)類不能包含實(shí)例構(gòu)造函數(shù),但可以包含靜態(tài)構(gòu)造函數(shù)。如果非靜態(tài)類包含需要進(jìn)

8、行重要的初始化的靜態(tài)成員,也應(yīng)定義靜態(tài)構(gòu)造函數(shù)。包含需要進(jìn)行重要的初始化的靜態(tài)成員,也應(yīng)定義靜態(tài)構(gòu)造函數(shù)。93.1.4 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)l構(gòu)造函數(shù)構(gòu)造函數(shù):是創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用的函數(shù)。一般在構(gòu)造函數(shù)中做一是創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用的函數(shù)。一般在構(gòu)造函數(shù)中做一些初始化工作,或者做一些僅需執(zhí)行一次的特定操作。些初始化工作,或者做一些僅需執(zhí)行一次的特定操作。l構(gòu)造函數(shù)沒有返回類型,并且它的名稱與其所屬的類的名稱相同。構(gòu)造函數(shù)沒有返回類型,并且它的名稱與其所屬的類的名稱相同。lC#支持兩種構(gòu)造函數(shù):實(shí)例構(gòu)造函數(shù)和靜態(tài)構(gòu)造函數(shù)。支持兩種構(gòu)造函數(shù):實(shí)例構(gòu)造函數(shù)和靜態(tài)構(gòu)造函數(shù)。1. 實(shí)例構(gòu)造函

9、數(shù)實(shí)例構(gòu)造函數(shù)每創(chuàng)建一個(gè)對(duì)象,都會(huì)先通過每創(chuàng)建一個(gè)對(duì)象,都會(huì)先通過new關(guān)鍵字指明調(diào)用的構(gòu)造函數(shù),這種關(guān)鍵字指明調(diào)用的構(gòu)造函數(shù),這種構(gòu)造函數(shù)稱為實(shí)例構(gòu)造函數(shù)。例如:構(gòu)造函數(shù)稱為實(shí)例構(gòu)造函數(shù)。例如: Child child = new Child();這條語句的這條語句的Child()就是被調(diào)用的實(shí)例構(gòu)造函數(shù)。就是被調(diào)用的實(shí)例構(gòu)造函數(shù)。103.1.4 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)2. 靜態(tài)靜態(tài)構(gòu)造函數(shù)構(gòu)造函數(shù)如果構(gòu)造函數(shù)聲明包含如果構(gòu)造函數(shù)聲明包含static修飾符,則為靜態(tài)構(gòu)造函數(shù),否則為實(shí)例構(gòu)造函修飾符,則為靜態(tài)構(gòu)造函數(shù),否則為實(shí)例構(gòu)造函數(shù)。數(shù)。創(chuàng)建第一個(gè)實(shí)例或引用任何靜態(tài)成員之前,

10、創(chuàng)建第一個(gè)實(shí)例或引用任何靜態(tài)成員之前,CLR會(huì)自動(dòng)調(diào)用靜態(tài)構(gòu)造函數(shù)。會(huì)自動(dòng)調(diào)用靜態(tài)構(gòu)造函數(shù)。例如:例如:class SimpleClass static readonly long baseline; static SimpleClass() baseline = DateTime.Now.Ticks; 113.1.4 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)靜態(tài)構(gòu)造函數(shù)靜態(tài)構(gòu)造函數(shù)的的特點(diǎn):特點(diǎn):l靜態(tài)構(gòu)造函數(shù)既沒有訪問修飾符,也沒有參數(shù)。靜態(tài)構(gòu)造函數(shù)既沒有訪問修飾符,也沒有參數(shù)。l在創(chuàng)建第一個(gè)實(shí)例或引用任何靜態(tài)成員之前,在創(chuàng)建第一個(gè)實(shí)例或引用任何靜態(tài)成員之前,CLR會(huì)自動(dòng)調(diào)用靜態(tài)會(huì)自動(dòng)調(diào)用靜態(tài)

11、構(gòu)造函數(shù)來初始化類。換言之,靜態(tài)構(gòu)造函數(shù)是在實(shí)例構(gòu)造函數(shù)之構(gòu)造函數(shù)來初始化類。換言之,靜態(tài)構(gòu)造函數(shù)是在實(shí)例構(gòu)造函數(shù)之前執(zhí)行的。前執(zhí)行的。l程序員無法直接調(diào)用靜態(tài)構(gòu)造函數(shù),也無法控制何時(shí)執(zhí)行靜態(tài)構(gòu)造程序員無法直接調(diào)用靜態(tài)構(gòu)造函數(shù),也無法控制何時(shí)執(zhí)行靜態(tài)構(gòu)造函數(shù)函數(shù)l靜態(tài)構(gòu)造函數(shù)僅調(diào)用一次。如果靜態(tài)構(gòu)造函數(shù)引發(fā)異常,在程序運(yùn)靜態(tài)構(gòu)造函數(shù)僅調(diào)用一次。如果靜態(tài)構(gòu)造函數(shù)引發(fā)異常,在程序運(yùn)行所在的應(yīng)用程序域的生存期內(nèi),類型將一直保持未行所在的應(yīng)用程序域的生存期內(nèi),類型將一直保持未初始初始化的狀態(tài)?;臓顟B(tài)。123.1.3 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)3. 默認(rèn)構(gòu)造函數(shù)和私有構(gòu)造函數(shù)默認(rèn)構(gòu)造函數(shù)和私

12、有構(gòu)造函數(shù)l每個(gè)類要求必須至少有一個(gè)構(gòu)造函數(shù)。如果代碼中沒有聲明構(gòu)造函每個(gè)類要求必須至少有一個(gè)構(gòu)造函數(shù)。如果代碼中沒有聲明構(gòu)造函數(shù),則系統(tǒng)會(huì)自動(dòng)為該類提供一個(gè)不帶參數(shù)的空的構(gòu)造函數(shù),這種數(shù),則系統(tǒng)會(huì)自動(dòng)為該類提供一個(gè)不帶參數(shù)的空的構(gòu)造函數(shù),這種自動(dòng)提供的構(gòu)造函數(shù)稱為默認(rèn)構(gòu)造函數(shù)。自動(dòng)提供的構(gòu)造函數(shù)稱為默認(rèn)構(gòu)造函數(shù)。l構(gòu)造函數(shù)一般用構(gòu)造函數(shù)一般用public修飾符,但也可以用修飾符,但也可以用private創(chuàng)建私有構(gòu)造函創(chuàng)建私有構(gòu)造函數(shù)。私有構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),通常用在只包含靜態(tài)成數(shù)。私有構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),通常用在只包含靜態(tài)成員的類中,用來阻止該類被實(shí)例化。員的類中,用來阻

13、止該類被實(shí)例化。l如果不指定構(gòu)造函數(shù)的訪問修飾符,默認(rèn)是如果不指定構(gòu)造函數(shù)的訪問修飾符,默認(rèn)是private。但是,一般都。但是,一般都顯式地使用顯式地使用private修飾符來清楚地表明該類不能被實(shí)例化。修飾符來清楚地表明該類不能被實(shí)例化。4重載構(gòu)造函數(shù)重載構(gòu)造函數(shù)l構(gòu)造函數(shù)可以被重載(構(gòu)造函數(shù)可以被重載(Overloading),但不能被繼承。),但不能被繼承。133.1.4 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)5析構(gòu)函數(shù)和自動(dòng)內(nèi)存管理析構(gòu)函數(shù)和自動(dòng)內(nèi)存管理l析構(gòu)函數(shù)析構(gòu)函數(shù)析構(gòu)函數(shù)是一種用于實(shí)現(xiàn)銷毀類實(shí)例所需操作的成員。析構(gòu)函數(shù)是一種用于實(shí)現(xiàn)銷毀類實(shí)例所需操作的成員。析構(gòu)函數(shù)不能帶參數(shù),

14、也不能包含訪問修飾符。析構(gòu)函數(shù)不能帶參數(shù),也不能包含訪問修飾符。析構(gòu)函數(shù)是自動(dòng)調(diào)用的,不能顯式調(diào)用析構(gòu)函數(shù)。析構(gòu)函數(shù)是自動(dòng)調(diào)用的,不能顯式調(diào)用析構(gòu)函數(shù)。l自動(dòng)內(nèi)存管理自動(dòng)內(nèi)存管理由由C#使用垃圾回收器實(shí)現(xiàn),即自動(dòng)決定何時(shí)釋放和銷毀內(nèi)存使用垃圾回收器實(shí)現(xiàn),即自動(dòng)決定何時(shí)釋放和銷毀內(nèi)存。如果聲明如果聲明了了析構(gòu)函數(shù),開發(fā)人員析構(gòu)函數(shù),開發(fā)人員也也可通過可通過System.GC的靜態(tài)方法在一的靜態(tài)方法在一定程度上控制垃圾回收器的行為。該類可用于請(qǐng)求執(zhí)行一次回收操定程度上控制垃圾回收器的行為。該類可用于請(qǐng)求執(zhí)行一次回收操作、并自動(dòng)判斷是否應(yīng)該執(zhí)行析構(gòu)函數(shù)。作、并自動(dòng)判斷是否應(yīng)該執(zhí)行析構(gòu)函數(shù)。143.1

15、.5 字段和局部變量字段和局部變量字段是類的成員,局部變量是塊的成員。字段是類的成員,局部變量是塊的成員。1字段字段字段是指在類或結(jié)構(gòu)中聲明的字段是指在類或結(jié)構(gòu)中聲明的“類級(jí)別類級(jí)別”的變量。或者說,字段是整的變量?;蛘哒f,字段是整個(gè)類內(nèi)部的所有方法和事件中都可以訪問的變量。個(gè)類內(nèi)部的所有方法和事件中都可以訪問的變量。2只讀字段(只讀字段(readonly)readonly關(guān)鍵字用于聲明可以在程序運(yùn)行期間只能初始化關(guān)鍵字用于聲明可以在程序運(yùn)行期間只能初始化“一次一次”的的字段。初始化的方法有兩種,一種是在聲明語句中初始化該字段,另字段。初始化的方法有兩種,一種是在聲明語句中初始化該字段,另一種

16、是在構(gòu)造函數(shù)中初始化該字段。一種是在構(gòu)造函數(shù)中初始化該字段。3局部變量局部變量局部變量是相對(duì)于字段來說的??梢詫⒕植孔兞坷斫鉃榫植孔兞渴窍鄬?duì)于字段來說的??梢詫⒕植孔兞坷斫鉃椤皦K塊”級(jí)別的級(jí)別的變量變量。153.1.6 結(jié)構(gòu)的定義和成員組織結(jié)構(gòu)的定義和成員組織l結(jié)構(gòu)是值類型,它和類的主要區(qū)別是結(jié)構(gòu)中的數(shù)據(jù)保存在堆棧(結(jié)構(gòu)是值類型,它和類的主要區(qū)別是結(jié)構(gòu)中的數(shù)據(jù)保存在堆棧(Stack)中而不是保存在堆()中而不是保存在堆(Heap)中。另外,所有結(jié)構(gòu)都隱式地)中。另外,所有結(jié)構(gòu)都隱式地從從Object繼承,但自定義結(jié)構(gòu)時(shí),不能從其他結(jié)構(gòu)繼承。繼承,但自定義結(jié)構(gòu)時(shí),不能從其他結(jié)構(gòu)繼承。l結(jié)構(gòu)成員和

17、類成員相同,包括字段、結(jié)構(gòu)成員和類成員相同,包括字段、屬性屬性、構(gòu)造函數(shù)構(gòu)造函數(shù)、方法、事件、方法、事件、運(yùn)算符、索引器、析構(gòu)函數(shù)等。運(yùn)算符、索引器、析構(gòu)函數(shù)等?!纠纠?-2】 分別用類和結(jié)構(gòu)定義具有分別用類和結(jié)構(gòu)定義具有x、y坐標(biāo)的點(diǎn),然后在主程序中坐標(biāo)的點(diǎn),然后在主程序中各創(chuàng)建并初始化一個(gè)含有各創(chuàng)建并初始化一個(gè)含有10個(gè)點(diǎn)的數(shù)組。個(gè)點(diǎn)的數(shù)組。163.2 屬性和方法屬性和方法l3.2.1 屬性(屬性(Property)l3.2.2 方法方法173.2.1 屬性屬性(Property)屬性屬性(property)是字段的擴(kuò)展,用于提供對(duì)字段讀寫的手段。屬是字段的擴(kuò)展,用于提供對(duì)字段讀寫的手段

18、。屬性和字段的區(qū)別是屬性不表示存儲(chǔ)位置,而是通過性和字段的區(qū)別是屬性不表示存儲(chǔ)位置,而是通過get訪問器和訪問器和set訪問器指定讀寫字段的值時(shí)需要執(zhí)行的語句。訪問器指定讀寫字段的值時(shí)需要執(zhí)行的語句。1. 常規(guī)屬性聲明常規(guī)屬性聲明如果需要對(duì)外公開某些字段,并對(duì)字段的值進(jìn)行驗(yàn)證,可以利用如果需要對(duì)外公開某些字段,并對(duì)字段的值進(jìn)行驗(yàn)證,可以利用屬性的屬性的get和和set訪問器來實(shí)現(xiàn)。訪問器來實(shí)現(xiàn)。2. 自動(dòng)實(shí)現(xiàn)的屬性自動(dòng)實(shí)現(xiàn)的屬性自動(dòng)實(shí)現(xiàn)的屬性是指開發(fā)人員只需要聲明屬性,而與該屬性對(duì)應(yīng)自動(dòng)實(shí)現(xiàn)的屬性是指開發(fā)人員只需要聲明屬性,而與該屬性對(duì)應(yīng)的字段則由系統(tǒng)自動(dòng)提供。自動(dòng)實(shí)現(xiàn)的屬性必須同時(shí)聲明的字段

19、則由系統(tǒng)自動(dòng)提供。自動(dòng)實(shí)現(xiàn)的屬性必須同時(shí)聲明get和和set訪問器。訪問器。183.2.2 方法方法方法是類或結(jié)構(gòu)的一種成員,是一組程序代碼的集合,用于完成指定方法是類或結(jié)構(gòu)的一種成員,是一組程序代碼的集合,用于完成指定的功能。每個(gè)方法都有一個(gè)方法名,便于識(shí)別和讓其他方法調(diào)用。的功能。每個(gè)方法都有一個(gè)方法名,便于識(shí)別和讓其他方法調(diào)用。1方法的聲明和參數(shù)傳遞方法的聲明和參數(shù)傳遞定義方法的一般形式為定義方法的一般形式為訪問修飾符訪問修飾符 返回值類型返回值類型 方法名方法名(參數(shù)序列參數(shù)序列) 語句序列語句序列方法聲明中的參數(shù)用于向方法傳遞值或變量引用。方法的參數(shù)從調(diào)用方法聲明中的參數(shù)用于向方法傳

20、遞值或變量引用。方法的參數(shù)從調(diào)用該方法時(shí)指定的實(shí)參獲取實(shí)際值。有四類參數(shù):該方法時(shí)指定的實(shí)參獲取實(shí)際值。有四類參數(shù):值參數(shù)、引用參數(shù)、值參數(shù)、引用參數(shù)、輸出參數(shù)和參數(shù)數(shù)組。輸出參數(shù)和參數(shù)數(shù)組。193.2.2 方法方法(1) 值參數(shù)值參數(shù)值參數(shù)(值參數(shù)(value parameter)用于傳遞輸入?yún)?shù)。一個(gè)值參數(shù)相當(dāng)于)用于傳遞輸入?yún)?shù)。一個(gè)值參數(shù)相當(dāng)于一個(gè)局部變量,只是它的初始值來自為該形參傳遞的實(shí)參。一個(gè)局部變量,只是它的初始值來自為該形參傳遞的實(shí)參?!纠纠?-3】演示值參數(shù)的基本用法?!垦菔局祬?shù)的基本用法。203.2.2 方法方法(2) 引用參數(shù)引用參數(shù) 引用參數(shù)(引用參數(shù)(refer

21、ence parameter)用于傳遞輸入和輸出參數(shù)。為)用于傳遞輸入和輸出參數(shù)。為引用參數(shù)傳遞的實(shí)參必須是變量,并且在方法執(zhí)行期間,引用參數(shù)與引用參數(shù)傳遞的實(shí)參必須是變量,并且在方法執(zhí)行期間,引用參數(shù)與實(shí)參變量表示同一存儲(chǔ)位置。引用參數(shù)使用實(shí)參變量表示同一存儲(chǔ)位置。引用參數(shù)使用ref修飾符聲明。修飾符聲明?!纠纠?-4】演示引用參數(shù)的基本用法?!垦菔疽脜?shù)的基本用法。213.2.2 方法方法(3) 輸出參數(shù)輸出參數(shù)輸出參數(shù)(輸出參數(shù)(output parameter)用于傳遞返回的參數(shù),用)用于傳遞返回的參數(shù),用out關(guān)鍵字關(guān)鍵字聲明。格式為聲明。格式為 out 參數(shù)類型參數(shù)類型 參數(shù)名

22、參數(shù)名【例【例3-5】演示】演示out關(guān)鍵字的用法。關(guān)鍵字的用法。223.2.2 方法方法(4) 參數(shù)數(shù)組參數(shù)數(shù)組 參數(shù)數(shù)組用于向方法傳遞可變數(shù)目的實(shí)參,用參數(shù)數(shù)組用于向方法傳遞可變數(shù)目的實(shí)參,用params關(guān)鍵字聲關(guān)鍵字聲明。如果方法有多個(gè)參數(shù),只有最后一個(gè)參數(shù)才可以用參數(shù)數(shù)組聲明。如果方法有多個(gè)參數(shù),只有最后一個(gè)參數(shù)才可以用參數(shù)數(shù)組聲明,并且參數(shù)數(shù)組的類型必須是一維數(shù)組類型。明,并且參數(shù)數(shù)組的類型必須是一維數(shù)組類型?!纠纠?-6】演示】演示params關(guān)鍵字的基本用法。關(guān)鍵字的基本用法。233.2.2 方法方法2. 方法重載方法重載方法重載是指具有相同的方法名,但參數(shù)類型或參數(shù)個(gè)數(shù)不完全

23、方法重載是指具有相同的方法名,但參數(shù)類型或參數(shù)個(gè)數(shù)不完全相同的多個(gè)方法可以同時(shí)出現(xiàn)在一個(gè)類中。這種技術(shù)非常有用,相同的多個(gè)方法可以同時(shí)出現(xiàn)在一個(gè)類中。這種技術(shù)非常有用,在項(xiàng)目開發(fā)過程中,我們會(huì)發(fā)現(xiàn)很多方法都需要使用方法重載來在項(xiàng)目開發(fā)過程中,我們會(huì)發(fā)現(xiàn)很多方法都需要使用方法重載來實(shí)現(xiàn)。實(shí)現(xiàn)。243.3 類的繼承與多態(tài)性類的繼承與多態(tài)性l3.3.1 封裝封裝l3.3.2 繼承繼承l(wèi)3.3.3 多態(tài)(多態(tài)(new、virtual、override)253.3.1 封裝封裝封裝一個(gè)類時(shí),既可以像定義一個(gè)普通的類一樣,也可以將類聲明為封裝一個(gè)類時(shí),既可以像定義一個(gè)普通的類一樣,也可以將類聲明為抽象類或

24、者密封類。抽象類或者密封類。1抽象類(抽象類(abstract class)抽象類使用抽象類使用abstract修飾符來描述,用于表示該類中的成員(例如方修飾符來描述,用于表示該類中的成員(例如方法)不一定實(shí)現(xiàn),即可以只有聲明部分而沒有實(shí)現(xiàn)部分。抽象類只能法)不一定實(shí)現(xiàn),即可以只有聲明部分而沒有實(shí)現(xiàn)部分。抽象類只能用做其他類的基類,而且無法直接實(shí)例化抽象類。用做其他類的基類,而且無法直接實(shí)例化抽象類。2密封類(密封類(sealed)密封類是指不能被其他類繼承的類。在密封類是指不能被其他類繼承的類。在C#語言中,用語言中,用sealed修飾符聲修飾符聲明密封類。由于密封類不能被其他類繼承,因此系

25、統(tǒng)就可以在運(yùn)行時(shí)明密封類。由于密封類不能被其他類繼承,因此系統(tǒng)就可以在運(yùn)行時(shí)對(duì)密封類中的內(nèi)容進(jìn)行優(yōu)化,從而提高系統(tǒng)的性能。對(duì)密封類中的內(nèi)容進(jìn)行優(yōu)化,從而提高系統(tǒng)的性能。263.3.2 繼承繼承繼承用于簡(jiǎn)化類的設(shè)計(jì)工作量,同時(shí)還能避免設(shè)計(jì)的不一致性。一般繼承用于簡(jiǎn)化類的設(shè)計(jì)工作量,同時(shí)還能避免設(shè)計(jì)的不一致性。一般將公共的、相同的部分放在被繼承的類中,非公共的、不相同的部將公共的、相同的部分放在被繼承的類中,非公共的、不相同的部分放在繼承的類中。分放在繼承的類中。1類繼承的一般形式類繼承的一般形式在在C#中,用冒號(hào)(中,用冒號(hào)(“:”)表示繼承。被繼承的類叫基類或者父類,)表示繼承。被繼承的類叫基

26、類或者父類,從基類繼承的類叫擴(kuò)充類,又叫派生類或者子類。從基類繼承的類叫擴(kuò)充類,又叫派生類或者子類。l繼承意味著一個(gè)類隱式地將它的基類的所有成員當(dāng)作自已的成員,繼承意味著一個(gè)類隱式地將它的基類的所有成員當(dāng)作自已的成員,而且派生類還能夠在繼承基類的基礎(chǔ)上繼續(xù)添加新的成員。但是,而且派生類還能夠在繼承基類的基礎(chǔ)上繼續(xù)添加新的成員。但是,基類的實(shí)例構(gòu)造函數(shù)、靜態(tài)構(gòu)造函數(shù)和析構(gòu)函數(shù)除外?;惖膶?shí)例構(gòu)造函數(shù)、靜態(tài)構(gòu)造函數(shù)和析構(gòu)函數(shù)除外。l擴(kuò)充類不能繼承基類中所定義的擴(kuò)充類不能繼承基類中所定義的private成員,只能繼承基類的成員,只能繼承基類的public成員或成員或protected成員。成員。27

27、3.3.2 繼承繼承2繼承過程中構(gòu)造函數(shù)的處理繼承過程中構(gòu)造函數(shù)的處理l擴(kuò)充類可繼承基類中聲明為擴(kuò)充類可繼承基類中聲明為public或或protected的成員的成員。l構(gòu)造函數(shù)構(gòu)造函數(shù)在擴(kuò)充類中在擴(kuò)充類中不會(huì)被繼承下來。如果讓構(gòu)造函數(shù)也能繼承,由于擴(kuò)不會(huì)被繼承下來。如果讓構(gòu)造函數(shù)也能繼承,由于擴(kuò)充類中無法訪問基類的私有成員,從而導(dǎo)致程序運(yùn)行失敗。充類中無法訪問基類的私有成員,從而導(dǎo)致程序運(yùn)行失敗。lC#在內(nèi)部按照下列順序處理構(gòu)造函數(shù):從擴(kuò)充類依次向上尋找其基類,直在內(nèi)部按照下列順序處理構(gòu)造函數(shù):從擴(kuò)充類依次向上尋找其基類,直到找到最初的基類,然后開始執(zhí)行最初的基類的構(gòu)造函數(shù),再依次向下執(zhí)到找

28、到最初的基類,然后開始執(zhí)行最初的基類的構(gòu)造函數(shù),再依次向下執(zhí)行擴(kuò)充類的構(gòu)造函數(shù),直至執(zhí)行完最終的擴(kuò)充類的構(gòu)造函數(shù)為止。行擴(kuò)充類的構(gòu)造函數(shù),直至執(zhí)行完最終的擴(kuò)充類的構(gòu)造函數(shù)為止?!纠纠?-7】演示繼承的基本用法?!垦菔纠^承的基本用法。283.3.3 多態(tài)多態(tài)(new、virtual、override)多態(tài)性的定義是:同一操作可分別作用于不同的類的實(shí)例,此時(shí)不同多態(tài)性的定義是:同一操作可分別作用于不同的類的實(shí)例,此時(shí)不同的類將進(jìn)行不同的解釋,最后產(chǎn)生不同的執(zhí)行結(jié)果。的類將進(jìn)行不同的解釋,最后產(chǎn)生不同的執(zhí)行結(jié)果。1虛擬(虛擬(virtual)和重寫()和重寫(override)使用虛擬方法與重寫方

29、法時(shí),需要注意下面幾個(gè)方面。使用虛擬方法與重寫方法時(shí),需要注意下面幾個(gè)方面。l虛擬方法不能聲明為靜態(tài)(虛擬方法不能聲明為靜態(tài)(static)的。因?yàn)殪o態(tài)的方法是應(yīng)用在類)的。因?yàn)殪o態(tài)的方法是應(yīng)用在類這一層次的,而面向?qū)ο蟮亩鄳B(tài)性只能通過對(duì)象進(jìn)行操作,所以無這一層次的,而面向?qū)ο蟮亩鄳B(tài)性只能通過對(duì)象進(jìn)行操作,所以無法通過類名直接調(diào)用。法通過類名直接調(diào)用。lvirtual不能和不能和private一起使用。聲明為一起使用。聲明為private就無法在擴(kuò)充類中重就無法在擴(kuò)充類中重寫了。寫了。l重寫方法的名稱、參數(shù)個(gè)數(shù)、參數(shù)類型以及返回類型都必須和虛擬重寫方法的名稱、參數(shù)個(gè)數(shù)、參數(shù)類型以及返回類型都必

30、須和虛擬方法的一致。方法的一致。293.3.3 多態(tài)多態(tài)(new、virtual、override)2. 隱藏(隱藏(new)l編寫方法時(shí),如果希望擴(kuò)充類重寫基類的方法,需要在擴(kuò)充類中用編寫方法時(shí),如果希望擴(kuò)充類重寫基類的方法,需要在擴(kuò)充類中用override聲明;如果希望隱藏基類的方法,在擴(kuò)充類中需要用聲明;如果希望隱藏基類的方法,在擴(kuò)充類中需要用new聲聲明,這就是明,這就是C#語言進(jìn)行版本控制的依據(jù)。語言進(jìn)行版本控制的依據(jù)。l除了重寫基類的方法外,還可以在擴(kuò)充類中使用除了重寫基類的方法外,還可以在擴(kuò)充類中使用new修飾符來隱藏修飾符來隱藏基類中同名的方法?;愔型姆椒?。l與方法重寫不

31、同的是,使用與方法重寫不同的是,使用new關(guān)鍵字時(shí)并不要求基類中的方法聲關(guān)鍵字時(shí)并不要求基類中的方法聲明為明為virtual,只要在擴(kuò)充類的方法前聲明為,只要在擴(kuò)充類的方法前聲明為new,就可以隱藏基類的,就可以隱藏基類的方法。方法。303.3.3 多態(tài)多態(tài)(new、virtual、override)3. 在擴(kuò)充類中直接調(diào)用基類的方法在擴(kuò)充類中直接調(diào)用基類的方法可以在擴(kuò)充類中通過可以在擴(kuò)充類中通過base關(guān)鍵字直接調(diào)用基類的方法,例如:關(guān)鍵字直接調(diào)用基類的方法,例如:class MyBaseClass public virtual int MyMethod() return 5; class

32、MyDerivedClass : MyBaseClass public override int MyMethod() return base.MyMethod () * 4; 313.4 常用結(jié)構(gòu)和類的用法常用結(jié)構(gòu)和類的用法l3.4.1 Math類類l3.4.2 DateTime結(jié)構(gòu)和結(jié)構(gòu)和TimeSpan結(jié)構(gòu)結(jié)構(gòu)l3.4.3 秒表秒表和和計(jì)時(shí)計(jì)時(shí)器器l3.4.4 隨機(jī)數(shù)隨機(jī)數(shù)323.4.1 Math類類Math類定義了各種常用的數(shù)學(xué)運(yùn)算,該類位于類定義了各種常用的數(shù)學(xué)運(yùn)算,該類位于System命名空間下,命名空間下,其作用有兩個(gè),一個(gè)是為三角函數(shù)、對(duì)數(shù)函數(shù)和其他通用數(shù)學(xué)函數(shù)提其作用有兩個(gè),一個(gè)是為三角函數(shù)、對(duì)數(shù)函數(shù)和其他通用數(shù)學(xué)函數(shù)提供常數(shù),如供常數(shù),如PI值等;二是通過靜態(tài)方法提供了各種數(shù)學(xué)運(yùn)算功能。值等;二是通過靜態(tài)方法提供了各種數(shù)學(xué)運(yùn)算功能?!纠纠?-8】演示】演示Math類的基本用法。類的基本用法。333.4.2 DateTime結(jié)構(gòu)和結(jié)構(gòu)和TimeSpan結(jié)構(gòu)結(jié)構(gòu)用于用于對(duì)日

溫馨提示

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

評(píng)論

0/150

提交評(píng)論