




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、教育部普通高等教育十二五國(guó)家級(jí)規(guī)劃教材教育部普通高等教育十二五國(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 訪問(wèn)修飾符訪問(wèn)修飾符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 類的定義和成員組織類的定義和成員組織類類:封裝數(shù)據(jù)的基本單位:封裝數(shù)據(jù)的基本單位定義對(duì)象具有的特征(字段、屬性等)和可執(zhí)行的操作定義對(duì)象具有的特征(字段、屬性等)和可執(zhí)行的操作(方法、事件等)。(方法、事件等)。 自定義類的常用形式自定義類的常用形式: 訪問(wèn)修飾符訪問(wèn)修飾符 static class 類名類名 : 基類基類 ,接口序列,接口序列 類成員類成員 類成員類成員:包括字段、屬性、構(gòu)造函數(shù)、方法、事
3、件、運(yùn)算符、索包括字段、屬性、構(gòu)造函數(shù)、方法、事件、運(yùn)算符、索引器、析構(gòu)函數(shù)等。引器、析構(gòu)函數(shù)等。53.1.2 訪問(wèn)修飾符訪問(wèn)修飾符類和類的成員都可以使用下面的訪問(wèn)修飾符。類和類的成員都可以使用下面的訪問(wèn)修飾符。lpublic:類的內(nèi)部和外部代碼都可以訪問(wèn)。:類的內(nèi)部和外部代碼都可以訪問(wèn)。lprivate:類的內(nèi)部可訪問(wèn),類的外部無(wú)法訪問(wèn)。如果省略類成員的:類的內(nèi)部可訪問(wèn),類的外部無(wú)法訪問(wèn)。如果省略類成員的訪問(wèn)修飾符,默認(rèn)為訪問(wèn)修飾符,默認(rèn)為private。linternal:同一個(gè)程序集中的代碼都可以訪問(wèn),程序集外的其他代碼:同一個(gè)程序集中的代碼都可以訪問(wèn),程序集外的其他代碼無(wú)法訪問(wèn)。如果省
4、略類的訪問(wèn)修飾符,默認(rèn)為無(wú)法訪問(wèn)。如果省略類的訪問(wèn)修飾符,默認(rèn)為internal。被編譯到同一個(gè)被編譯到同一個(gè)dll或或exe中的程序就是處于同一個(gè)程序集中,在不同的中的程序就是處于同一個(gè)程序集中,在不同的dll或或exe文件中的程序就是處于不同的程序集中。文件中的程序就是處于不同的程序集中。.net中的程序集就是編譯器直接生成的中的程序集就是編譯器直接生成的dll或可執(zhí)行的或可執(zhí)行的exe文件,包含程文件,包含程序集清單、元數(shù)據(jù)和序集清單、元數(shù)據(jù)和MSIL等。等。lprotected:類的內(nèi)部或者從該類繼承的子類可以訪問(wèn)。:類的內(nèi)部或者從該類繼承的子類可以訪問(wèn)。lprotected inte
5、rnal:從該類繼承的子類或者從另一個(gè)程序集中繼承:從該類繼承的子類或者從另一個(gè)程序集中繼承的類都可以訪問(wèn)。的類都可以訪問(wèn)。6partial修飾符修飾符:包含包含partial修飾符的類稱為分部類。修飾符的類稱為分部類。l可將類的定義分布在多個(gè)文件中,編譯器編譯帶有可將類的定義分布在多個(gè)文件中,編譯器編譯帶有partial修飾符的修飾符的類時(shí),會(huì)自動(dòng)將這些文件合并在一起。類時(shí),會(huì)自動(dòng)將這些文件合并在一起。l可可隔離自動(dòng)生成的代碼和人工書寫的代碼隔離自動(dòng)生成的代碼和人工書寫的代碼?!纠?-1】 演示如何聲明類、字段、構(gòu)造函數(shù)和方法,同時(shí)說(shuō)明如何實(shí)例化演示如何聲明類、字段、構(gòu)造函數(shù)和方法,同時(shí)說(shuō)
6、明如何實(shí)例化對(duì)象、如何使用分部類以及如何輸出實(shí)例數(shù)據(jù)。對(duì)象、如何使用分部類以及如何輸出實(shí)例數(shù)據(jù)。3.1.2 訪問(wèn)修飾符訪問(wèn)修飾符73.1.3 靜態(tài)成員和實(shí)例成員靜態(tài)成員和實(shí)例成員通過(guò)類名調(diào)用靜態(tài)成員,通過(guò)類名調(diào)用靜態(tài)成員,通過(guò)通過(guò)實(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)垃圾回收器檢測(cè)到不再使用該靜態(tài)成員時(shí),會(huì)自動(dòng)釋放其占用的內(nèi)存。檢測(cè)到不再使用該靜態(tài)成員時(shí),會(huì)自動(dòng)釋放其占用的內(nèi)存。l可用于類、字段、方法、屬性、運(yùn)算符、事件和構(gòu)造函數(shù),但不能用于索
7、可用于類、字段、方法、屬性、運(yùn)算符、事件和構(gòu)造函數(shù),但不能用于索引器、析構(gòu)函數(shù)或者類以外的類型。引器、析構(gòu)函數(shù)或者類以外的類型。l靜態(tài)字段靜態(tài)字段有兩個(gè)常見(jiàn)的用法:一是記錄已實(shí)例化對(duì)象的個(gè)數(shù),二是存儲(chǔ)必有兩個(gè)常見(jiàn)的用法:一是記錄已實(shí)例化對(duì)象的個(gè)數(shù),二是存儲(chǔ)必須在所有實(shí)例之間共享的值。須在所有實(shí)例之間共享的值。l靜態(tài)方法靜態(tài)方法可以被重載但不能被重寫,因?yàn)樗鼈儗儆陬悾粚儆陬惖娜魏慰梢员恢剌d但不能被重寫,因?yàn)樗鼈儗儆陬?,而不屬于類的任何?shí)例。實(shí)例。l靜態(tài)字段和靜態(tài)方法只能通過(guò)類名訪問(wèn)靜態(tài)字段和靜態(tài)方法只能通過(guò)類名訪問(wèn),而不能通過(guò)實(shí)例名訪問(wèn)而不能通過(guò)實(shí)例名訪問(wèn).l靜態(tài)方法只能訪問(wèn)類的靜態(tài)成員,不
8、能訪問(wèn)類的非靜態(tài)成員靜態(tài)方法只能訪問(wèn)類的靜態(tài)成員,不能訪問(wèn)類的非靜態(tài)成員.l非靜態(tài)方法可以訪問(wèn)類的靜態(tài)成員,也可以訪問(wèn)類的非靜態(tài)成員;非靜態(tài)方法可以訪問(wèn)類的靜態(tài)成員,也可以訪問(wèn)類的非靜態(tài)成員;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無(wú)法實(shí)例化。這與在非靜態(tài)類中定義私有構(gòu)造函數(shù)可阻止類被實(shí)例無(wú)法實(shí)例化。這與在非靜態(tài)類中定義私有構(gòu)造函數(shù)可阻止類被實(shí)例化的機(jī)制相似。化的機(jī)制相似。l是密封的,因此
9、不能被繼承。是密封的,因此不能被繼承。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)行重要的初始化的靜態(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ù)沒(méi)有返回類型,并且它的名稱與其所屬的類的名稱相同。構(gòu)造函
10、數(shù)沒(méi)有返回類型,并且它的名稱與其所屬的類的名稱相同。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)造函數(shù)實(shí)例構(gòu)造函數(shù)每創(chuàng)建一個(gè)對(duì)象,都會(huì)先通過(guò)每創(chuàng)建一個(gè)對(duì)象,都會(huì)先通過(guò)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ù)。例如: Form LoadForm = new Form3();這條語(yǔ)句的這條語(yǔ)句的Form3()就是被調(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ù)
11、聲明包含如果構(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)成員之前,創(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ù)既沒(méi)有訪問(wèn)修飾符,
12、也沒(méi)有參數(shù)。靜態(tài)構(gòu)造函數(shù)既沒(méi)有訪問(wèn)修飾符,也沒(méi)有參數(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)構(gòu)造函數(shù)來(lái)初始化類。換言之,靜態(tài)構(gòu)造函數(shù)是在實(shí)例構(gòu)造函數(shù)之構(gòu)造函數(shù)來(lái)初始化類。換言之,靜態(tài)構(gòu)造函數(shù)是在實(shí)例構(gòu)造函數(shù)之前執(zhí)行的。前執(zhí)行的。l程序員無(wú)法直接調(diào)用靜態(tài)構(gòu)造函數(shù),也無(wú)法控制何時(shí)執(zhí)行靜態(tài)構(gòu)造程序員無(wú)法直接調(diào)用靜態(tài)構(gòu)造函數(shù),也無(wú)法控制何時(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),類型將一直保持未行所
13、在的應(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ù)和私有構(gòu)造函數(shù)l每個(gè)類要求必須至少有一個(gè)構(gòu)造函數(shù)。如果代碼中沒(méi)有聲明構(gòu)造函每個(gè)類要求必須至少有一個(gè)構(gòu)造函數(shù)。如果代碼中沒(méi)有聲明構(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)建私有
14、構(gòu)造函數(shù)。私有構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),通常用在只包含靜態(tài)成數(shù)。私有構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),通常用在只包含靜態(tài)成員的類中,用來(lái)阻止該類被實(shí)例化。員的類中,用來(lái)阻止該類被實(shí)例化。l如果不指定構(gòu)造函數(shù)的訪問(wèn)修飾符,默認(rèn)是如果不指定構(gòu)造函數(shù)的訪問(wèn)修飾符,默認(rèn)是private。但是,一般都。但是,一般都顯式地使用顯式地使用private修飾符來(lái)清楚地表明該類不能被實(shí)例化。修飾符來(lái)清楚地表明該類不能被實(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ù)
15、和自動(dòng)內(nèi)存管理析構(gòu)函數(shù)和自動(dòng)內(nèi)存管理l析構(gòu)函數(shù)析構(gòu)函數(shù)名稱與所屬類名相同名稱與所屬類名相同,但之前加波浪號(hào)但之前加波浪號(hào)”.析構(gòu)函數(shù)是一種用于實(shí)現(xiàn)銷毀類實(shí)例所需操作的成員。析構(gòu)函數(shù)是一種用于實(shí)現(xiàn)銷毀類實(shí)例所需操作的成員。析構(gòu)函數(shù)不能帶參數(shù),也不能包含訪問(wèn)修飾符。析構(gòu)函數(shù)不能帶參數(shù),也不能包含訪問(wèn)修飾符。析構(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ù),開(kāi)發(fā)人員析構(gòu)函數(shù),開(kāi)發(fā)人員也也可通過(guò)可通過(guò)Sy
16、stem.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ù)。l使用使用using更好地釋放資源更好地釋放資源: using(A a = new A() 143.1.5 字段和局部變量字段和局部變量字段是類的成員,局部變量是塊的成員。字段是類的成員,局部變量是塊的成員。1字段字段字段是指在類或結(jié)構(gòu)中聲明的字段是指在類或結(jié)構(gòu)中聲明的“類級(jí)別類級(jí)別”的變量?;蛘哒f(shuō),字段是整的變量。或者說(shuō),字段是整個(gè)類內(nèi)部的所有方法和事件中都可以訪問(wèn)
17、的變量。個(gè)類內(nèi)部的所有方法和事件中都可以訪問(wèn)的變量。(成員變量成員變量)2只讀字段(只讀字段(readonly)readonly關(guān)鍵字用于聲明可以在程序運(yùn)行期間只能初始化關(guān)鍵字用于聲明可以在程序運(yùn)行期間只能初始化“一次一次”的的字段。初始化的方法有兩種,一種是在聲明語(yǔ)句中初始化該字段,另字段。初始化的方法有兩種,一種是在聲明語(yǔ)句中初始化該字段,另一種是在構(gòu)造函數(shù)中初始化該字段。一種是在構(gòu)造函數(shù)中初始化該字段。3局部變量局部變量局部變量是相對(duì)于字段來(lái)說(shuō)的??梢詫⒕植孔兞坷斫鉃榫植孔兞渴窍鄬?duì)于字段來(lái)說(shuō)的??梢詫⒕植孔兞坷斫鉃椤皦K塊”級(jí)別的級(jí)別的變量變量。153.1.6 結(jié)構(gòu)的定義和成員組織結(jié)構(gòu)的定
18、義和成員組織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)成員和類成員相同,包括字段、結(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),然后在主
19、程序中坐標(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ì)字段讀寫的手段。屬性和字段的區(qū)別是屬性不表示存儲(chǔ)位置,而是通過(guò)性和字段的區(qū)別是屬性不表示存儲(chǔ)位置,而是通過(guò)get訪問(wèn)器和訪問(wèn)器和set訪問(wèn)器指定讀寫字段的值時(shí)需要執(zhí)行的語(yǔ)句。訪問(wèn)器指定讀寫字段的值時(shí)需要執(zhí)行的語(yǔ)句。1. 常規(guī)屬性聲明常規(guī)屬性聲明如果需要對(duì)外公開(kāi)某
20、些字段,并對(duì)字段的值進(jìn)行驗(yàn)證,可以利用如果需要對(duì)外公開(kāi)某些字段,并對(duì)字段的值進(jìn)行驗(yàn)證,可以利用屬性的屬性的get和和set訪問(wèn)器來(lái)實(shí)現(xiàn)。訪問(wèn)器來(lái)實(shí)現(xiàn)。Class Studentprivate int age;public int Agegetreturn age;set if(value =0) age = value;183.2.1 屬性屬性(Property)2. 自動(dòng)實(shí)現(xiàn)的屬性自動(dòng)實(shí)現(xiàn)的屬性自動(dòng)實(shí)現(xiàn)的屬性是指開(kāi)發(fā)人員只需要聲明屬性,而與該屬性對(duì)應(yīng)自動(dòng)實(shí)現(xiàn)的屬性是指開(kāi)發(fā)人員只需要聲明屬性,而與該屬性對(duì)應(yīng)的字段則由系統(tǒng)自動(dòng)提供。自動(dòng)實(shí)現(xiàn)的屬性必須同時(shí)聲明的字段則由系統(tǒng)自動(dòng)提供。自動(dòng)實(shí)現(xiàn)的屬性
21、必須同時(shí)聲明get和和set訪問(wèn)器。訪問(wèn)器。Class Studentpublic int Ageget; private set;public string Nameget;set193.2.2 方法方法方法是類或結(jié)構(gòu)的一種成員,是一組程序代碼的集合,用于完成指定方法是類或結(jié)構(gòu)的一種成員,是一組程序代碼的集合,用于完成指定的功能。每個(gè)方法都有一個(gè)方法名,便于識(shí)別和讓其他方法調(diào)用。的功能。每個(gè)方法都有一個(gè)方法名,便于識(shí)別和讓其他方法調(diào)用。1方法的聲明和參數(shù)傳遞方法的聲明和參數(shù)傳遞定義方法的一般形式為定義方法的一般形式為訪問(wèn)修飾符訪問(wèn)修飾符 返回值類型返回值類型 方法名方法名(參數(shù)序列參數(shù)序列)
22、 語(yǔ)句序列語(yǔ)句序列方法聲明中的參數(shù)用于向方法傳遞值或變量引用。方法的參數(shù)從調(diào)用方法聲明中的參數(shù)用于向方法傳遞值或變量引用。方法的參數(shù)從調(diào)用該方法時(shí)指定的實(shí)參獲取實(shí)際值。有四類參數(shù):該方法時(shí)指定的實(shí)參獲取實(shí)際值。有四類參數(shù):值參數(shù)、引用參數(shù)、值參數(shù)、引用參數(shù)、輸出參數(shù)和參數(shù)數(shù)組。輸出參數(shù)和參數(shù)數(shù)組。203.2.2 方法方法(1) 值參數(shù)值參數(shù)值參數(shù)(值參數(shù)(value parameter)用于傳遞輸入?yún)?shù)。一個(gè)值參數(shù)相當(dāng)于)用于傳遞輸入?yún)?shù)。一個(gè)值參數(shù)相當(dāng)于一個(gè)局部變量,只是它的初始值來(lái)自為該形參傳遞的實(shí)參。一個(gè)局部變量,只是它的初始值來(lái)自為該形參傳遞的實(shí)參?!纠纠?-3】演示值參數(shù)的基本用法
23、?!垦菔局祬?shù)的基本用法。213.2.2 方法方法(2) 引用參數(shù)引用參數(shù) 引用參數(shù)(引用參數(shù)(reference parameter)用于傳遞輸入和輸出參數(shù)。為)用于傳遞輸入和輸出參數(shù)。為引用參數(shù)傳遞的實(shí)參必須是變量,并且在方法執(zhí)行期間,引用參數(shù)與引用參數(shù)傳遞的實(shí)參必須是變量,并且在方法執(zhí)行期間,引用參數(shù)與實(shí)參變量表示同一存儲(chǔ)位置。引用參數(shù)使用實(shí)參變量表示同一存儲(chǔ)位置。引用參數(shù)使用ref修飾符聲明。修飾符聲明?!纠纠?-4】演示引用參數(shù)的基本用法?!垦菔疽脜?shù)的基本用法。223.2.2 方法方法(3) 輸出參數(shù)輸出參數(shù)輸出參數(shù)(輸出參數(shù)(output parameter)用于傳遞返回的參
24、數(shù),用)用于傳遞返回的參數(shù),用out關(guān)鍵字關(guān)鍵字聲明。格式為聲明。格式為 out 參數(shù)類型參數(shù)類型 參數(shù)名參數(shù)名【例【例3-5】演示】演示out關(guān)鍵字的用法。關(guān)鍵字的用法。233.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ù)組類型。【例【例3-6】演示】演示params關(guān)鍵字的基本用法。關(guān)鍵字的基本用
25、法。243.2.2 方法方法2. 方法重載方法重載方法重載是指具有相同的方法名,但參數(shù)類型或參數(shù)個(gè)數(shù)不完全方法重載是指具有相同的方法名,但參數(shù)類型或參數(shù)個(gè)數(shù)不完全相同的多個(gè)方法可以同時(shí)出現(xiàn)在一個(gè)類中。相同的多個(gè)方法可以同時(shí)出現(xiàn)在一個(gè)類中。(編譯器能根據(jù)輸入編譯器能根據(jù)輸入的參數(shù)確定對(duì)應(yīng)方法即可的參數(shù)確定對(duì)應(yīng)方法即可)這種技術(shù)非常有用,在項(xiàng)目開(kāi)發(fā)過(guò)程中,我們會(huì)發(fā)現(xiàn)很多方法都這種技術(shù)非常有用,在項(xiàng)目開(kāi)發(fā)過(guò)程中,我們會(huì)發(fā)現(xiàn)很多方法都需要使用方法重載來(lái)實(shí)現(xiàn)。需要使用方法重載來(lái)實(shí)現(xiàn)。Public static int Add(int i, int j);Public static string Add(
26、string s1, string s2);Public static long Add(long x);Public static long Add(int i, int j);/ 僅返回值不同無(wú)法重載僅返回值不同無(wú)法重載253.3 類的繼承與多態(tài)性類的繼承與多態(tài)性l3.3.1 封裝封裝l3.3.2 繼承繼承l(wèi)3.3.3 多態(tài)(多態(tài)(new、virtual、override)263.3.1 封裝封裝封裝一個(gè)類時(shí),既可以像定義一個(gè)普通的類一樣,也可以將類聲明為封裝一個(gè)類時(shí),既可以像定義一個(gè)普通的類一樣,也可以將類聲明為抽象類或者密封類。抽象類或者密封類。1抽象類(抽象類(abstract cl
27、ass)抽象類使用抽象類使用abstract修飾符來(lái)描述,用于表示該類中的成員(例如方修飾符來(lái)描述,用于表示該類中的成員(例如方法)不一定實(shí)現(xiàn),即可以只有聲明部分而沒(méi)有實(shí)現(xiàn)部分。抽象類只能法)不一定實(shí)現(xiàn),即可以只有聲明部分而沒(méi)有實(shí)現(xiàn)部分。抽象類只能用做其他類的基類,而且無(wú)法直接實(shí)例化抽象類。用做其他類的基類,而且無(wú)法直接實(shí)例化抽象類。2密封類(密封類(sealed)密封類是指不能被其他類繼承的類。在密封類是指不能被其他類繼承的類。在C#語(yǔ)言中,用語(yǔ)言中,用sealed修飾符聲修飾符聲明密封類。由于密封類不能被其他類繼承,因此系統(tǒng)就可以在運(yùn)行時(shí)明密封類。由于密封類不能被其他類繼承,因此系統(tǒng)就可以
28、在運(yùn)行時(shí)對(duì)密封類中的內(nèi)容進(jìn)行優(yōu)化,從而對(duì)密封類中的內(nèi)容進(jìn)行優(yōu)化,從而提高系統(tǒng)的性能提高系統(tǒng)的性能。273.3.2 繼承繼承繼承用于簡(jiǎn)化類的設(shè)計(jì)工作量,同時(shí)還能避免設(shè)計(jì)的不一致性。一般繼承用于簡(jiǎn)化類的設(shè)計(jì)工作量,同時(shí)還能避免設(shè)計(jì)的不一致性。一般將公共的、相同的部分放在被繼承的類中,非公共的、不相同的部將公共的、相同的部分放在被繼承的類中,非公共的、不相同的部分放在繼承的類中。分放在繼承的類中。1類繼承的一般形式類繼承的一般形式在在C#中,用冒號(hào)(中,用冒號(hào)(“:”)表示繼承。被繼承的類叫基類或者父類,)表示繼承。被繼承的類叫基類或者父類,從基類繼承的類叫擴(kuò)充類,又叫派生類或者子類。從基類繼承的類
29、叫擴(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子子類不能繼承基類中所定義的類不能繼承基類中所定義的private成員,只能繼承基類的成員,只能繼承基類的public成員或成員或protected成員。成員。283.3.2 繼承繼承2繼承過(guò)程中構(gòu)造函數(shù)的處理繼承過(guò)程中構(gòu)造函數(shù)的處理l子子類
30、可繼承基類中聲明為類可繼承基類中聲明為public或或protected的成員的成員。l構(gòu)造函數(shù)構(gòu)造函數(shù)在子類中在子類中不會(huì)被繼承下來(lái)。如果讓構(gòu)造函數(shù)也能繼承,由于不會(huì)被繼承下來(lái)。如果讓構(gòu)造函數(shù)也能繼承,由于子子類類中無(wú)法訪問(wèn)基類的私有成員,從而導(dǎo)致程序運(yùn)行失敗。中無(wú)法訪問(wèn)基類的私有成員,從而導(dǎo)致程序運(yùn)行失敗。lC#在內(nèi)部按照下列順序處理構(gòu)造函數(shù):從在內(nèi)部按照下列順序處理構(gòu)造函數(shù):從子子類依次向上尋找其基類,直到類依次向上尋找其基類,直到找到最初的基類,然后開(kāi)始執(zhí)行最初的基類的構(gòu)造函數(shù),再依次向下執(zhí)行找到最初的基類,然后開(kāi)始執(zhí)行最初的基類的構(gòu)造函數(shù),再依次向下執(zhí)行子子類的構(gòu)造函數(shù),直至執(zhí)行完最
31、終的類的構(gòu)造函數(shù),直至執(zhí)行完最終的子子類的構(gòu)造函數(shù)為止。類的構(gòu)造函數(shù)為止?!纠纠?-7】演示繼承的基本用法?!垦菔纠^承的基本用法。293.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)使用虛擬方法與重寫方法時(shí),需要注意下面幾個(gè)方面。使用虛擬方法與重寫方法時(shí),需要注意下面幾個(gè)方面。l虛擬方法不能聲明為靜態(tài)(
32、虛擬方法不能聲明為靜態(tài)(static)的。因?yàn)殪o態(tài)的方法是應(yīng)用在類)的。因?yàn)殪o態(tài)的方法是應(yīng)用在類這一層次的,而面向?qū)ο蟮亩鄳B(tài)性只能通過(guò)對(duì)象進(jìn)行操作,所以無(wú)這一層次的,而面向?qū)ο蟮亩鄳B(tài)性只能通過(guò)對(duì)象進(jìn)行操作,所以無(wú)法通過(guò)類名直接調(diào)用。法通過(guò)類名直接調(diào)用。lvirtual不能和不能和private一起使用。聲明為一起使用。聲明為private就無(wú)法在就無(wú)法在子子類中重寫類中重寫了。了。l重寫方法的名稱、參數(shù)個(gè)數(shù)、參數(shù)類型以及返回類型都必須和虛擬重寫方法的名稱、參數(shù)個(gè)數(shù)、參數(shù)類型以及返回類型都必須和虛擬方法的一致。方法的一致。303.3.3 多態(tài)多態(tài)(new、virtual、override)2.
33、隱藏(隱藏(new)l編寫方法時(shí),如果希望編寫方法時(shí),如果希望子子類重寫基類的方法,需要在類重寫基類的方法,需要在子子類中用類中用override聲明;如果希望隱藏基類的方法,在聲明;如果希望隱藏基類的方法,在子子類中需要用類中需要用new聲明聲明,這就是,這就是C#語(yǔ)言進(jìn)行版本控制的依據(jù)。語(yǔ)言進(jìn)行版本控制的依據(jù)。l除了重寫基類的方法外,還可以在除了重寫基類的方法外,還可以在子子類中使用類中使用new修飾符來(lái)隱藏基修飾符來(lái)隱藏基類中同名的方法。類中同名的方法。l與方法重寫不同的是,使用與方法重寫不同的是,使用new關(guān)鍵字時(shí)并不要求基類中的方法聲關(guān)鍵字時(shí)并不要求基類中的方法聲明為明為virtua
34、l,只要在,只要在子子類的方法前聲明為類的方法前聲明為new,就可以隱藏基類的方,就可以隱藏基類的方法。法。313.3.3 多態(tài)多態(tài)(new、virtual、override)3. 在在子子類中直接調(diào)用基類的方法類中直接調(diào)用基類的方法可以在擴(kuò)充類中通過(guò)可以在擴(kuò)充類中通過(guò)base關(guān)鍵字直接調(diào)用基類的方法,例如:關(guān)鍵字直接調(diào)用基類的方法,例如:class MyBaseClass public virtual int MyMethod() return 5; class MyDerivedClass : MyBaseClass public override int MyMethod() return base.MyMethod () * 4; 323.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ù)333.4.1 Math類類Math類定義了各種常用的數(shù)學(xué)運(yùn)算,該類位于類定義了各種常用的數(shù)學(xué)運(yùn)算,該類位于System命名空間下,命名空間下,其作用有兩個(gè),一個(gè)是為三角函數(shù)、對(duì)數(shù)函數(shù)和其他通用數(shù)學(xué)函數(shù)提其作用有兩個(gè),
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)太陽(yáng)能電池背板行業(yè)市場(chǎng)規(guī)模調(diào)研及投資前景研究分析報(bào)告
- 2025年金屬補(bǔ)償器項(xiàng)目市場(chǎng)調(diào)查研究報(bào)告
- 2025年里程表校驗(yàn)儀項(xiàng)目市場(chǎng)調(diào)查研究報(bào)告
- 2025年連桿/轉(zhuǎn)向節(jié)襯鉸壓機(jī)項(xiàng)目市場(chǎng)調(diào)查研究報(bào)告
- 2025年聚乙烯單線項(xiàng)目市場(chǎng)調(diào)查研究報(bào)告
- 2025年混紡牛仔布項(xiàng)目市場(chǎng)調(diào)查研究報(bào)告
- 幼兒園科學(xué)課程實(shí)施的現(xiàn)狀、問(wèn)題與突破路徑探究
- 小組活動(dòng)教學(xué)策略在英語(yǔ)教學(xué)中的應(yīng)用:理論、實(shí)踐與展望
- 小學(xué)初任教師教學(xué)反思現(xiàn)狀及提升路徑探究
- 2025年初中地理模擬試卷:鄉(xiāng)土地理特色試題及答案詳解
- 2023-2024年整形外科學(xué)(副高)考試參考題庫(kù)(真題考點(diǎn)版)帶答案解析
- 廣東省中山市八年級(jí)下學(xué)期期末考試語(yǔ)文試題
- 【淺析如何將游戲化課程融入幼兒一日活動(dòng)之中2600字】
- 雙減背景下高中語(yǔ)文優(yōu)化作業(yè)設(shè)計(jì)實(shí)踐與研究
- 《企業(yè)財(cái)務(wù)現(xiàn)狀的杜邦分析-以大疆科技為例》開(kāi)題報(bào)告(含提綱)2400字
- 道德與法治六年級(jí)下冊(cè)7《多元文化 多樣魅力》(課件)
- 中醫(yī)治療頸椎病課件完整版
- KJ251煤礦人員定位系統(tǒng)-設(shè)計(jì)方案
- 消防接警調(diào)度崗位理論知識(shí)考試題庫(kù)匯總-上(單選題)
- YS/T 778-2011真空脫脂燒結(jié)爐
- GB/T 15256-1994硫化橡膠低溫脆性的測(cè)定(多試樣法)
評(píng)論
0/150
提交評(píng)論