




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、q 本課主要介紹面向?qū)ο缶幊痰幕A(chǔ)知識(shí),主要介紹:本課主要介紹面向?qū)ο缶幊痰幕A(chǔ)知識(shí),主要介紹: 定義類定義類 聲明方法聲明方法 使用構(gòu)造函數(shù)使用構(gòu)造函數(shù) 使用靜態(tài)成員使用靜態(tài)成員q 在本課,我們先編寫在本課,我們先編寫 控制臺(tái)應(yīng)用程序控制臺(tái)應(yīng)用程序 來說明一些基本來說明一些基本原理,原理, 再編寫再編寫 Windows應(yīng)用程序應(yīng)用程序 來說明類的應(yīng)用。來說明類的應(yīng)用。q 本節(jié)描述了如何定義類、實(shí)例化對(duì)象、訪問類成員以本節(jié)描述了如何定義類、實(shí)例化對(duì)象、訪問類成員以及使用命名空間來組織類。及使用命名空間來組織類。q 學(xué)習(xí)完本節(jié)后,你將能夠:學(xué)習(xí)完本節(jié)后,你將能夠: 定義類定義類 創(chuàng)建對(duì)象創(chuàng)建對(duì)象
2、 使用訪問修飾符來定義類成員的作用域使用訪問修飾符來定義類成員的作用域 使用命名空間來組織類使用命名空間來組織類q 示例示例1:創(chuàng)建一個(gè)描繪鴨子的對(duì)象:創(chuàng)建一個(gè)描繪鴨子的對(duì)象 定義一個(gè)定義一個(gè)“鴨子鴨子”類類 這個(gè)這個(gè)“鴨子鴨子”類具有特定的行為,如行走、鳴叫、飛行和游泳。類具有特定的行為,如行走、鳴叫、飛行和游泳。 這個(gè)類具有特定的屬性,如高度、重量和顏色。這個(gè)類具有特定的屬性,如高度、重量和顏色。 “鴨子鴨子”類定義了鴨子是什么和鴨子能做什么。類定義了鴨子是什么和鴨子能做什么。 一個(gè)鴨子對(duì)象一只具有特定高度、顏色、重量和行為特征的鴨子。一個(gè)鴨子對(duì)象一只具有特定高度、顏色、重量和行為特征的鴨
3、子。你所飼養(yǎng)的鴨子就可以看做是鴨子的對(duì)象。你所飼養(yǎng)的鴨子就可以看做是鴨子的對(duì)象。q 示例示例2:開發(fā)人員需要編寫一個(gè)函數(shù),用來改變數(shù)據(jù)庫中的客戶:開發(fā)人員需要編寫一個(gè)函數(shù),用來改變數(shù)據(jù)庫中的客戶地址。地址。 傳統(tǒng)方法是:編寫一個(gè)傳統(tǒng)方法是:編寫一個(gè)ChangeAddress函數(shù),其參數(shù)是數(shù)據(jù)庫的表和函數(shù),其參數(shù)是數(shù)據(jù)庫的表和行。缺點(diǎn)是當(dāng)要更改客戶信息時(shí),必須知道這些信息在數(shù)據(jù)庫特定行。缺點(diǎn)是當(dāng)要更改客戶信息時(shí),必須知道這些信息在數(shù)據(jù)庫特定表中的組織形式。表中的組織形式。 用面向?qū)ο蠓椒▽?shí)現(xiàn),就可以定義一個(gè)客戶類,用來描述客戶并提用面向?qū)ο蠓椒▽?shí)現(xiàn),就可以定義一個(gè)客戶類,用來描述客戶并提供更改地
4、址的功能。該客戶對(duì)象具有供更改地址的功能。該客戶對(duì)象具有ChangeAddress動(dòng)作動(dòng)作(或方法或方法),實(shí)際上是該客戶對(duì)象更改了它自己的地址。實(shí)際上是該客戶對(duì)象更改了它自己的地址。q 先有對(duì)象還是先有類?先有對(duì)象還是先有類?應(yīng)該先定義類才可以從類的定義聲明對(duì)象應(yīng)該先定義類才可以從類的定義聲明對(duì)象。public class Customer public stringname;public decimalcreditLimit;public uintcustomerID; 定義類定義類 將類實(shí)例化為對(duì)象將類實(shí)例化為對(duì)象Customer nextCustomer = new Customer(
5、); 類成員的訪問類成員的訪問nextC = Suzan Fine;q 要訪問對(duì)象的成員應(yīng)該先實(shí)例化對(duì)象嗎?要訪問對(duì)象的成員應(yīng)該先實(shí)例化對(duì)象嗎?需要先實(shí)例化對(duì)象。需要先實(shí)例化對(duì)象。q 總結(jié):總結(jié): 定義類定義類 對(duì)類名推薦使用對(duì)類名推薦使用Pascal命名規(guī)范:每個(gè)單詞的首字母要大寫。命名規(guī)范:每個(gè)單詞的首字母要大寫。 創(chuàng)建并初始化對(duì)象創(chuàng)建并初始化對(duì)象屬性屬性 訪問修飾符訪問修飾符 class ; = new ();q 類中可以有哪些成員?類中可以有哪些成員?+ +S Se et tT Ti im me e( () )+ +T To oU Un ni iv ve er
6、rs sa al lS St tr ri in ng g( () ) : : s st tr ri in ng g+ +T To oS St ta an nd da ar rd dS St tr ri in ng g( () ) : : s st tr ri in ng g+ +h ho ou ur r : : i in nt t+ +m mi in nu ut te e : : i in nt t+ +s se ec co on nd d : : i in nt tM My yT Ti im me e字段字段屬性屬性方法方法對(duì)象的狀態(tài)對(duì)象的狀態(tài)對(duì)象的行為對(duì)象的行為q 示例:用類實(shí)現(xiàn)示例:用類
7、實(shí)現(xiàn) 時(shí)間時(shí)間 的抽象數(shù)據(jù)類型的抽象數(shù)據(jù)類型+ +S Se et tT Ti im me e( () )+ +T To oU Un ni iv ve er rs sa al lS St tr ri in ng g( () ) : : s st tr ri in ng g+ +T To oS St ta an nd da ar rd dS St tr ri in ng g( () ) : : s st tr ri in ng g+ +h ho ou ur r : : i in nt t+ +m mi in nu ut te e : : i in nt t+ +s se ec co on nd d
8、 : : i in nt tM My yT Ti im me e示例示例5-1q 在哪兒書寫類的代碼?在哪兒書寫類的代碼? 與你的源代碼文件在一塊,同一個(gè)命名空間與你的源代碼文件在一塊,同一個(gè)命名空間(namespace)下。下。 C#允許在一個(gè)類中嵌套另一個(gè)類的定義。允許在一個(gè)類中嵌套另一個(gè)類的定義。 建議建議將類書寫在另外一個(gè)將類書寫在另外一個(gè).cs文件中。文件中。q 使用使用MyTime類類q 上例中的方法也可以定義成如下形式:上例中的方法也可以定義成如下形式:(形參名與類中的字段名同名了形參名與類中的字段名同名了)q 如何區(qū)別出哪個(gè)如何區(qū)別出哪個(gè)hour是類的字段,哪個(gè)是類的字段,哪個(gè)
9、hour是方法的是方法的局部變量?局部變量? 使用使用this關(guān)鍵字來修飾類的字段(屬性、方法)關(guān)鍵字來修飾類的字段(屬性、方法)q 新建新建 “類庫類庫”q 編寫類的定義編寫類的定義q 生成動(dòng)態(tài)鏈接庫生成動(dòng)態(tài)鏈接庫(dll文件文件)q 在你的項(xiàng)目中添加對(duì)該動(dòng)態(tài)鏈接庫的引用在你的項(xiàng)目中添加對(duì)該動(dòng)態(tài)鏈接庫的引用q 使用該類使用該類 示例:使用上述的示例:使用上述的MyTime類,在類,在Windows應(yīng)用程序設(shè)應(yīng)用程序設(shè)計(jì)應(yīng)用。計(jì)應(yīng)用。示例示例5-2q 在本練習(xí)中,你將創(chuàng)建一個(gè)表示羚羊的類,并且創(chuàng)在本練習(xí)中,你將創(chuàng)建一個(gè)表示羚羊的類,并且創(chuàng)建一個(gè)該類的對(duì)象。實(shí)驗(yàn)步驟如下:建一個(gè)該類的對(duì)象。實(shí)驗(yàn)步
10、驟如下:將課件文件夾下將課件文件夾下“Csharp實(shí)驗(yàn)實(shí)驗(yàn)”文件夾復(fù)制到本地硬盤,文件夾復(fù)制到本地硬盤,然后打開然后打開CSharp實(shí)驗(yàn)實(shí)驗(yàn)Lesson05ClassesExampleClass.sln。復(fù)查任務(wù)列表復(fù)查任務(wù)列表編寫定義編寫定義Antelope類的代碼類的代碼 在在“任務(wù)列表任務(wù)列表”窗口中,雙擊窗口中,雙擊TODO 1:定義定義Antelope類類。 Antelope類至少具有以下字段:類至少具有以下字段:v exhibitNumber (展廳號(hào)展廳號(hào))v age (年齡年齡)1. weight (重量重量)q 在本練習(xí)中,你將創(chuàng)建一個(gè)表示羚羊的類,并且創(chuàng)在本練習(xí)中,你將創(chuàng)建
11、一個(gè)表示羚羊的類,并且創(chuàng)建一個(gè)該類的對(duì)象。實(shí)驗(yàn)步驟如下建一個(gè)該類的對(duì)象。實(shí)驗(yàn)步驟如下(續(xù)續(xù)):創(chuàng)建一個(gè)創(chuàng)建一個(gè)Antelope類的對(duì)象,然后給它的成員賦值。類的對(duì)象,然后給它的成員賦值。 找到任務(wù)找到任務(wù)TODO 2:創(chuàng)建一個(gè)創(chuàng)建一個(gè)Antelope類的實(shí)例類的實(shí)例 創(chuàng)建創(chuàng)建Antelope對(duì)象的一個(gè)實(shí)例,并且給成員對(duì)象的一個(gè)實(shí)例,并且給成員exhibitNumber賦值。賦值。使用使用Output方法顯示方法顯示Antelope對(duì)象的成員對(duì)象的成員exhibitNumber。編譯程序,然后使用調(diào)試工具逐過程運(yùn)行代碼,以確保它編譯程序,然后使用調(diào)試工具逐過程運(yùn)行代碼,以確保它按照預(yù)期的要求來工
12、作。按照預(yù)期的要求來工作。保存程序,然后退出保存程序,然后退出Visual Studio .NET。q 上述上述MyTime類中,所有成員的訪問屬性都是類中,所有成員的訪問屬性都是public.q 這樣,我們想獲得這樣,我們想獲得 小時(shí)數(shù)、分鐘數(shù)、秒數(shù)小時(shí)數(shù)、分鐘數(shù)、秒數(shù) 比較方便比較方便q 但也帶來了不安全的因素,因?yàn)榈矌砹瞬话踩囊蛩?,因?yàn)閜ublic屬性既可以讓任屬性既可以讓任何人來讀,也可以讓任何人來改寫。何人來讀,也可以讓任何人來改寫。q 那么,我們將類的字段的訪問屬性定義為那么,我們將類的字段的訪問屬性定義為private.q 這樣,在類的外部這樣,在類的外部(類的使類的使用者
13、用者)就無法修改這個(gè)字段就無法修改這個(gè)字段的值,因?yàn)楦究床坏?。的值,因?yàn)楦究床坏?。q 當(dāng)然,也沒有辦法取它的當(dāng)然,也沒有辦法取它的值了。值了。q 使用訪問修飾符,可以定義應(yīng)用程序中類成員的作用域使用訪問修飾符,可以定義應(yīng)用程序中類成員的作用域public不限制訪問private只能從包含的類中訪問internal從類型所在的 assembly 訪問protected包含的類或繼承的子類可以訪問protected internal包含的類、繼承的子類或類型所在 assembly 可以訪問q 規(guī)則:規(guī)則: 命名空間總是默認(rèn)的命名空間總是默認(rèn)的public 類總是默認(rèn)的類總是默認(rèn)的public
14、類成員默認(rèn)為類成員默認(rèn)為private 對(duì)于一個(gè)類成員只能使用一個(gè)訪問修飾符。對(duì)于一個(gè)類成員只能使用一個(gè)訪問修飾符。private internal盡管是兩盡管是兩個(gè)單詞,但它是單個(gè)訪問修飾符。個(gè)單詞,但它是單個(gè)訪問修飾符。 成員的作用域永遠(yuǎn)不超出包含它的類。成員的作用域永遠(yuǎn)不超出包含它的類。q 推薦做法:推薦做法: 當(dāng)使用某類時(shí),類成員的可訪問性決定了用戶所能訪問的類成員。當(dāng)使用某類時(shí),類成員的可訪問性決定了用戶所能訪問的類成員。如果把一個(gè)類的某個(gè)成員定義為如果把一個(gè)類的某個(gè)成員定義為private,那么該類的使用者就看不,那么該類的使用者就看不到或使用那個(gè)成員到或使用那個(gè)成員 應(yīng)該只把那些
15、要讓類使用者看到的元素定義為應(yīng)該只把那些要讓類使用者看到的元素定義為public。減少。減少public成成員數(shù)量可以減少類的復(fù)雜性員數(shù)量可以減少類的復(fù)雜性(從使用者角度看從使用者角度看),而且使類的創(chuàng)建者便,而且使類的創(chuàng)建者便于對(duì)類進(jìn)行維護(hù),同時(shí)也便于為其提供文檔。于對(duì)類進(jìn)行維護(hù),同時(shí)也便于為其提供文檔。q 當(dāng)前述當(dāng)前述MyTime類的字段類的字段hour, minute, second的訪問屬的訪問屬性使用性使用private后,使用者便無法訪問它們,也就是說,后,使用者便無法訪問它們,也就是說,無法直接了解當(dāng)前時(shí)間的小時(shí)數(shù)。無法直接了解當(dāng)前時(shí)間的小時(shí)數(shù)。q 可以通過在可以通過在MyTim
16、e類中增加一個(gè)類中增加一個(gè)GetHour( )方法來實(shí)方法來實(shí)現(xiàn)?,F(xiàn)。q 如果還需要單獨(dú)設(shè)置當(dāng)前時(shí)間的小時(shí)數(shù),可以再增加如果還需要單獨(dú)設(shè)置當(dāng)前時(shí)間的小時(shí)數(shù),可以再增加一個(gè)一個(gè)SetHour( )方法。方法。q 這樣的設(shè)計(jì)對(duì)于使用者來說,不方便了。因?yàn)樗诌@樣的設(shè)計(jì)對(duì)于使用者來說,不方便了。因?yàn)樗謩e記住別記住2個(gè)方法,哪個(gè)方法是設(shè)置值的,哪個(gè)方法是獲個(gè)方法,哪個(gè)方法是設(shè)置值的,哪個(gè)方法是獲取值的。取值的。q 有沒有一種途徑,它可以讓使用者像使用公共的字段有沒有一種途徑,它可以讓使用者像使用公共的字段一樣方便,又能讓設(shè)計(jì)者能夠進(jìn)行安全地檢查?一樣方便,又能讓設(shè)計(jì)者能夠進(jìn)行安全地檢查?q 我們
17、可以使用我們可以使用屬性屬性來解決這個(gè)問題。來解決這個(gè)問題。q 屬性,從外部屬性,從外部(類的使用者類的使用者)來看,類似于類的字段。來看,類似于類的字段。從內(nèi)部從內(nèi)部(類的作者類的作者)來看,類似于類的方法。來看,類似于類的方法。getget訪問器訪問器setset訪問器訪問器q 如果只提供如果只提供 get訪問器訪問器, 那么這個(gè)屬性是只讀的。那么這個(gè)屬性是只讀的。q 如果只提供如果只提供 set訪問器,那么這個(gè)屬性是只寫的。訪問器,那么這個(gè)屬性是只寫的。 建議:建議: 將所有字段都定義為將所有字段都定義為private。 如果字段需要公開,請(qǐng)使用屬性將其公開。如果字段需要公開,請(qǐng)使用屬性
18、將其公開。q在本練習(xí)中,你將編寫和使用屬性。在本練習(xí)中,你將編寫和使用屬性。q場(chǎng)景:動(dòng)物園醫(yī)學(xué)中心需要對(duì)動(dòng)物的相關(guān)信息進(jìn)行管理。為此,場(chǎng)景:動(dòng)物園醫(yī)學(xué)中心需要對(duì)動(dòng)物的相關(guān)信息進(jìn)行管理。為此,需要開發(fā)一個(gè)描述獅子信息的對(duì)象。這些對(duì)象包括名字需要開發(fā)一個(gè)描述獅子信息的對(duì)象。這些對(duì)象包括名字(name)、年齡年齡(age)、體重、體重(weight)和性別和性別(gender)。本練習(xí)提供一個(gè)示例,。本練習(xí)提供一個(gè)示例,它說明了獅子對(duì)象的使用者對(duì)該對(duì)象的一些需求。它說明了獅子對(duì)象的使用者對(duì)該對(duì)象的一些需求。打開打開CSharp實(shí)驗(yàn)實(shí)驗(yàn)文件夾下的文件夾下的Lesson05Properities Pro
19、perities.sln。復(fù)查任務(wù)列表復(fù)查任務(wù)列表編寫可以把編寫可以把Gender設(shè)置為設(shè)置為Male或或Female的代碼:的代碼:在在“任務(wù)列表任務(wù)列表”窗口中,雙擊窗口中,雙擊TODO:Change Gender member of Lion Class to be a property (修改修改Lion類的類的Gender成員,使成員,使之成為一個(gè)屬性之成為一個(gè)屬性)。把把Gender修改為屬性修改為屬性編譯并運(yùn)行程序編譯并運(yùn)行程序在應(yīng)用程序中,單擊在應(yīng)用程序中,單擊Run,然后驗(yàn)證是否輸出以下結(jié)果:,然后驗(yàn)證是否輸出以下結(jié)果:Leo:Male Age:8; weighs 280kg
20、1.保存程序,然后退出保存程序,然后退出Visual Studio .NET。q 當(dāng)調(diào)用方法時(shí),必須保證返回類型、參數(shù)類型、參數(shù)當(dāng)調(diào)用方法時(shí),必須保證返回類型、參數(shù)類型、參數(shù)個(gè)數(shù)、參數(shù)順序與方法的定義完全一致。個(gè)數(shù)、參數(shù)順序與方法的定義完全一致。q 方法重載是指在同一作用域內(nèi)以同樣的名稱調(diào)用兩個(gè)方法重載是指在同一作用域內(nèi)以同樣的名稱調(diào)用兩個(gè)或多個(gè)方法。當(dāng)需要以不同的參數(shù)來執(zhí)行同樣的操作或多個(gè)方法。當(dāng)需要以不同的參數(shù)來執(zhí)行同樣的操作時(shí),方法重載將會(huì)很有用。時(shí),方法重載將會(huì)很有用。q C#中經(jīng)典的重載方法中經(jīng)典的重載方法Console.WriteLine:class Consolepublic s
21、tatic void WriteLine(int parameter)public static void WriteLine(double parameter)public static void WriteLine(decimal parameter)它們的參數(shù)具有不同的類型它們的參數(shù)具有不同的類型q 我們前面也學(xué)習(xí)過,我們前面也學(xué)習(xí)過,MessageBox類的類的Show方法也有許方法也有許多種用法:多種用法:它們的參數(shù)個(gè)數(shù)不一樣它們的參數(shù)個(gè)數(shù)不一樣q 重載方法是你能夠在同一個(gè)類中創(chuàng)建多種方法,它們重載方法是你能夠在同一個(gè)類中創(chuàng)建多種方法,它們有相同的名字和不同的簽名有相同的名字和不同的
22、簽名(方法名和方法參數(shù)列表全方法名和方法參數(shù)列表全稱為方法簽名稱為方法簽名)q 考慮前面示例中的考慮前面示例中的MyTime類類: 使用者只提供小時(shí)數(shù),將時(shí)間設(shè)為整點(diǎn)。如:使用者只提供小時(shí)數(shù),將時(shí)間設(shè)為整點(diǎn)。如: 使用者只提供小時(shí)和分鐘。如:使用者只提供小時(shí)和分鐘。如: 使用者提供時(shí)、分、秒,如:使用者提供時(shí)、分、秒,如:q 編譯器通過識(shí)別方法的編譯器通過識(shí)別方法的簽名簽名來區(qū)分調(diào)用哪個(gè)方法。來區(qū)分調(diào)用哪個(gè)方法。q 方法的方法的簽名簽名包括方法名、參數(shù)的類型、個(gè)數(shù)和順序包括方法名、參數(shù)的類型、個(gè)數(shù)和順序q 對(duì)以下重載的方法,編譯器能夠正確識(shí)別:對(duì)以下重載的方法,編譯器能夠正確識(shí)別:q 對(duì)以下方
23、法,編譯器無法識(shí)別,會(huì)報(bào)錯(cuò):對(duì)以下方法,編譯器無法識(shí)別,會(huì)報(bào)錯(cuò):public void Foo(int a, float b)public void Foo(float a, int b)public void Foo(int a, int b)public void Foo(int b, int a)q 構(gòu)造函數(shù)是特殊的方法,用來實(shí)現(xiàn)對(duì)象的初始化構(gòu)造函數(shù)是特殊的方法,用來實(shí)現(xiàn)對(duì)象的初始化 與類同名與類同名 沒有返回值沒有返回值q 構(gòu)造函數(shù)用于,當(dāng)實(shí)例化一個(gè)對(duì)象時(shí),會(huì)對(duì)類的成員構(gòu)造函數(shù)用于,當(dāng)實(shí)例化一個(gè)對(duì)象時(shí),會(huì)對(duì)類的成員進(jìn)行初始化。進(jìn)行初始化。q 當(dāng)你沒有構(gòu)造函數(shù)時(shí),當(dāng)你沒有構(gòu)造函數(shù)時(shí),.N
24、ET會(huì)提供一個(gè)默認(rèn)的空的構(gòu)造函數(shù)。如會(huì)提供一個(gè)默認(rèn)的空的構(gòu)造函數(shù)。如上述示例中的上述示例中的MyTime類,會(huì)有一個(gè)如下類,會(huì)有一個(gè)如下默認(rèn)構(gòu)造函數(shù)默認(rèn)構(gòu)造函數(shù):q 試問,下邊的代碼執(zhí)行后,結(jié)果會(huì)是什么?試問,下邊的代碼執(zhí)行后,結(jié)果會(huì)是什么?q 如果我們想使對(duì)象初始化時(shí),可以按照設(shè)計(jì)者的預(yù)期如果我們想使對(duì)象初始化時(shí),可以按照設(shè)計(jì)者的預(yù)期來進(jìn)行,就需要自己書寫構(gòu)造函數(shù)的代碼。來進(jìn)行,就需要自己書寫構(gòu)造函數(shù)的代碼。如上述如上述MyTime類,我們想初始化的時(shí)間是中午類,我們想初始化的時(shí)間是中午12:00.q 同方法的重載一樣,構(gòu)造函數(shù)也可以有多個(gè)重載的版同方法的重載一樣,構(gòu)造函數(shù)也可以有多個(gè)重載的
25、版本。本。q 注意:注意:編譯器只會(huì)當(dāng)類中沒有構(gòu)造函數(shù)時(shí),提供一個(gè)編譯器只會(huì)當(dāng)類中沒有構(gòu)造函數(shù)時(shí),提供一個(gè)默認(rèn)構(gòu)默認(rèn)構(gòu)造函數(shù)造函數(shù)。如果你提供了其它版本的構(gòu)造函數(shù),而沒有。如果你提供了其它版本的構(gòu)造函數(shù),而沒有提供默認(rèn)構(gòu)造函數(shù),你將不能調(diào)用默認(rèn)構(gòu)造函數(shù)。如:提供默認(rèn)構(gòu)造函數(shù),你將不能調(diào)用默認(rèn)構(gòu)造函數(shù)。如:在在MyTime類中沒有類中沒有你就不能這樣去實(shí)例化對(duì)象:你就不能這樣去實(shí)例化對(duì)象:q 在本練習(xí)中,對(duì)解決方案進(jìn)行修改,通過使用構(gòu)造函數(shù)來在本練習(xí)中,對(duì)解決方案進(jìn)行修改,通過使用構(gòu)造函數(shù)來正確地初始化正確地初始化animal對(duì)象。對(duì)象。打開打開Visual Studio .NET,然后打開,然
26、后打開CSharp實(shí)驗(yàn)實(shí)驗(yàn)文件夾下的文件夾下的Lesson05CtorCtorExample.sln。復(fù)查任務(wù)列表復(fù)查任務(wù)列表在構(gòu)造函數(shù)的調(diào)用中指定羚羊的性別:在構(gòu)造函數(shù)的調(diào)用中指定羚羊的性別: 在在”任務(wù)列表任務(wù)列表“窗口中雙擊窗口中雙擊TODO1: Change the constructor call to specify the gender(修改構(gòu)造函數(shù)的調(diào)修改構(gòu)造函數(shù)的調(diào)用語句,指定羚羊的性別用語句,指定羚羊的性別) 按照字符串格式指定羚羊的性別按照字符串格式指定羚羊的性別(gender),例如,例如male。測(cè)試代碼并觀察出錯(cuò)信息。測(cè)試代碼并觀察出錯(cuò)信息。 按按F5編譯并運(yùn)行程序
27、編譯并運(yùn)行程序1. 將出現(xiàn)一個(gè)錯(cuò)誤,原因是將出現(xiàn)一個(gè)錯(cuò)誤,原因是Antelope類并沒有帶有參數(shù)的構(gòu)類并沒有帶有參數(shù)的構(gòu)造函數(shù)。造函數(shù)。q在本練習(xí)中,對(duì)解決方案進(jìn)行修改,通過使用在本練習(xí)中,對(duì)解決方案進(jìn)行修改,通過使用構(gòu)造函數(shù)來正確地初始化構(gòu)造函數(shù)來正確地初始化animal對(duì)象對(duì)象(續(xù)續(xù))。編寫一個(gè)編寫一個(gè)Antelope類的構(gòu)造函數(shù),該構(gòu)造函數(shù)帶有一類的構(gòu)造函數(shù),該構(gòu)造函數(shù)帶有一個(gè)字符串類型的參數(shù)個(gè)字符串類型的參數(shù)在在“任務(wù)列表任務(wù)列表”窗口中雙擊窗口中雙擊TODO2: Add a constructor。添加一個(gè)構(gòu)造函數(shù),該函數(shù)接受步驟添加一個(gè)構(gòu)造函數(shù),該函數(shù)接受步驟3中輸入的字中輸入的字
28、符串值,并用它來設(shè)置符串值,并用它來設(shè)置gender成員。成員。測(cè)試代碼,驗(yàn)證創(chuàng)建了一個(gè)測(cè)試代碼,驗(yàn)證創(chuàng)建了一個(gè)gender為為male的的antelope對(duì)象。對(duì)象。5.保存該應(yīng)用程序,然后退出保存該應(yīng)用程序,然后退出Visual Studio .NET。q 析構(gòu)函數(shù)是在當(dāng)該對(duì)象被銷毀時(shí)執(zhí)行的。析構(gòu)函數(shù)是在當(dāng)該對(duì)象被銷毀時(shí)執(zhí)行的。q 析構(gòu)函數(shù)的格式:析構(gòu)函數(shù)的格式:類名類名( )q 我們一般上不需要寫析構(gòu)函數(shù)。當(dāng)沒有析構(gòu)函數(shù)時(shí),我們一般上不需要寫析構(gòu)函數(shù)。當(dāng)沒有析構(gòu)函數(shù)時(shí),.NET編譯器編譯器會(huì)自動(dòng)為我們構(gòu)造一個(gè)。會(huì)自動(dòng)為我們構(gòu)造一個(gè)。q 什么情況下需要自己寫析構(gòu)函數(shù)?什么情況下需要自己寫析
29、構(gòu)函數(shù)? 使用析構(gòu)函數(shù)主要是為了釋放資源。使用析構(gòu)函數(shù)主要是為了釋放資源。 如:當(dāng)該類中打開了一個(gè)文件,對(duì)象銷毀時(shí),應(yīng)當(dāng)關(guān)閉這個(gè)文件。如:當(dāng)該類中打開了一個(gè)文件,對(duì)象銷毀時(shí),應(yīng)當(dāng)關(guān)閉這個(gè)文件。 又如:當(dāng)該類中打開了數(shù)據(jù)庫,對(duì)象銷毀時(shí),應(yīng)當(dāng)關(guān)閉這個(gè)連接。又如:當(dāng)該類中打開了數(shù)據(jù)庫,對(duì)象銷毀時(shí),應(yīng)當(dāng)關(guān)閉這個(gè)連接。 再如:當(dāng)該類中申請(qǐng)了大量內(nèi)存,對(duì)象銷毀時(shí),應(yīng)當(dāng)釋放這些內(nèi)存。再如:當(dāng)該類中申請(qǐng)了大量內(nèi)存,對(duì)象銷毀時(shí),應(yīng)當(dāng)釋放這些內(nèi)存。q 什么時(shí)候調(diào)用析構(gòu)函數(shù)是不確定的,并不是不用該對(duì)象了就一定什么時(shí)候調(diào)用析構(gòu)函數(shù)是不確定的,并不是不用該對(duì)象了就一定會(huì)調(diào)用析構(gòu)函數(shù)。調(diào)用析構(gòu)函數(shù)的時(shí)機(jī)由會(huì)調(diào)用析構(gòu)函數(shù)。
30、調(diào)用析構(gòu)函數(shù)的時(shí)機(jī)由.NET的垃圾回收器來決的垃圾回收器來決定。定。q 在這里,我們將上一課中介紹的有關(guān)數(shù)組排序的示例在這里,我們將上一課中介紹的有關(guān)數(shù)組排序的示例改造成用類來進(jìn)行實(shí)現(xiàn)。改造成用類來進(jìn)行實(shí)現(xiàn)。示例示例5-3q 從該類的類圖可以看出,從該類的類圖可以看出,該類太復(fù)雜了。主要是該類太復(fù)雜了。主要是表示層與事務(wù)邏輯層混表示層與事務(wù)邏輯層混合在一塊,不易區(qū)分層合在一塊,不易區(qū)分層次。次。q 我們需要將與數(shù)組操作我們需要將與數(shù)組操作相關(guān)的一些數(shù)據(jù)和操作相關(guān)的一些數(shù)據(jù)和操作分離出來。分離出來。+Form1()#Dispose(in disposing : bool)-InitializeC
31、omponent()-Main()-Output(in anyObject : object)-GenerateDatas(inout array : int, in count : int)-ArrayToString(in array : int, in n : int) : string-MiniumOfArray(in array : int) : int-MaxiumOfArray(in array : int) : int-SelectSort(in array : int)-BubbleSort(in array : int)-InsertSort(in array : int)
32、-btnGenerate_Click(in sender : object, in e : EventArgs)-btnClear_Click(in sender : object, in e : EventArgs)-btnShowArray_Click(in sender : object, in e : EventArgs)-btnMin_Click(in sender : object, in e : EventArgs)-btnMax_Click(in sender : object, in e : EventArgs)-btnSelectSort_Click(in sender :
33、 object, in e : EventArgs)-btnBubbleSort_Click(in sender : object, in e : EventArgs)-button2_Click(in sender : object, in e : EventArgs)-label1 : Label-btnGenerate : Button-btnMin : Button-btnSelectSort : Button-btnShowArray : Button-btnBubbleSort : Button-button2 : Button-btnClear : Button-numCount
34、 : NumericUpDown-datas : int-btnMax : Button-txtOutput : RichTextBox-components : Container = nullF Fo or rm m1 1q 我們建立一個(gè)我們建立一個(gè)Sort類類+Sort(in count : int)+Minium() : int+Maxium() : int+SelectSort()+BubbleSort()+InsertSort()+ToString(in numsPerLine : int)+datas : intSortq 然后在界面設(shè)計(jì)中,實(shí)例化然后在界面設(shè)計(jì)中,實(shí)例化Sort
35、類,并調(diào)用類,并調(diào)用Sort類的方類的方法。法。q 還有沒有改進(jìn)的地方?還有沒有改進(jìn)的地方? 求最小數(shù)是用方法好,還是用屬性好?求最小數(shù)是用方法好,還是用屬性好? 如果要取出數(shù)組中某個(gè)元素的值,可以使用類似如果要取出數(shù)組中某個(gè)元素的值,可以使用類似s.datas10的的形式。但是又不想讓用戶使用形式。但是又不想讓用戶使用s.datas10=789的形式修改,如的形式修改,如何實(shí)現(xiàn)?何實(shí)現(xiàn)?將成員將成員datas使用使用private修飾符,然后設(shè)計(jì)一個(gè)屬性。修飾符,然后設(shè)計(jì)一個(gè)屬性。 如果想使用如果想使用s10的形式訪問的形式訪問s.datas10元素,如何實(shí)現(xiàn)?元素,如何實(shí)現(xiàn)?使用索引器使用
36、索引器q 當(dāng)類中包含數(shù)組或集合時(shí),如果能夠把類看成是一個(gè)數(shù)組,那么,當(dāng)類中包含數(shù)組或集合時(shí),如果能夠把類看成是一個(gè)數(shù)組,那么,會(huì)簡化對(duì)這些數(shù)組或集合的訪問。索引器會(huì)簡化對(duì)這些數(shù)組或集合的訪問。索引器(Indexer)是一種屬性,是一種屬性,它允許以數(shù)組的方式來索引對(duì)象。它允許以數(shù)組的方式來索引對(duì)象。q 索引器是一種屬性,因此它可以包含索引器是一種屬性,因此它可以包含get訪問器和訪問器和set訪問器。訪問器。q 索引器的屬性名必須是索引器的屬性名必須是this,形式如下:,形式如下:返回值類型返回值類型 this類型類型 索引名,類型索引名,類型 索引名,索引名,get/ 獲取數(shù)據(jù)獲取數(shù)據(jù)se
37、t/ 設(shè)置數(shù)據(jù)設(shè)置數(shù)據(jù)q 索引器使用更加靈活:索引器使用更加靈活: 可以使用整數(shù)作下標(biāo),也可以使用字符串等其它類型作下標(biāo)??梢允褂谜麛?shù)作下標(biāo),也可以使用字符串等其它類型作下標(biāo)。 返回值可以是數(shù)組中的值類型,也可以是與數(shù)組中值返回值可以是數(shù)組中的值類型,也可以是與數(shù)組中值 的類型的類型不同的其它類型。不同的其它類型。示例示例5-5q 本節(jié)介紹類的靜態(tài)成員。靜態(tài)成員屬于類,而不屬于本節(jié)介紹類的靜態(tài)成員。靜態(tài)成員屬于類,而不屬于實(shí)例。通過使用靜態(tài)構(gòu)造函數(shù)可以初始化類。實(shí)例。通過使用靜態(tài)構(gòu)造函數(shù)可以初始化類。q 學(xué)習(xí)完本節(jié)后,你將能夠:學(xué)習(xí)完本節(jié)后,你將能夠: 使用類的靜態(tài)成員使用類的靜態(tài)成員 使用靜
38、態(tài)構(gòu)造函數(shù)初始化類使用靜態(tài)構(gòu)造函數(shù)初始化類q 靜態(tài)成員靜態(tài)成員 屬于類屬于類 在類的實(shí)例創(chuàng)建以前完成初始化在類的實(shí)例創(chuàng)建以前完成初始化 被同一個(gè)類的所有實(shí)例共享被同一個(gè)類的所有實(shí)例共享class Lion public static string family = felidae;/貓科動(dòng)物貓科動(dòng)物./ A Lion object is not created in this codeConsole.WriteLine( Family: 0, Lion.family );q 靜態(tài)方法靜態(tài)方法 方法也可以是靜態(tài)的,當(dāng)對(duì)方法使用靜態(tài)修飾符時(shí),方法只方法也可以是靜態(tài)的,當(dāng)對(duì)方法使用靜態(tài)修飾符時(shí),方法
39、只能通過類而不能通過對(duì)象來訪問。能通過類而不能通過對(duì)象來訪問。 由于靜態(tài)方法是類的一部分,所以調(diào)用它們時(shí)無需創(chuàng)建類的由于靜態(tài)方法是類的一部分,所以調(diào)用它們時(shí)無需創(chuàng)建類的實(shí)例。在實(shí)例。在C#中,不能通過類的實(shí)例來訪問靜態(tài)方法。中,不能通過類的實(shí)例來訪問靜態(tài)方法。 使用靜態(tài)修飾聲明的方法是全局方法。當(dāng)靜態(tài)聲明某個(gè)方法使用靜態(tài)修飾聲明的方法是全局方法。當(dāng)靜態(tài)聲明某個(gè)方法時(shí),無論這個(gè)方法所屬的類被實(shí)例化多少次,靜態(tài)方法只有時(shí),無論這個(gè)方法所屬的類被實(shí)例化多少次,靜態(tài)方法只有一個(gè)。一個(gè)。 當(dāng)成員引用或操作的信息是關(guān)于類而不是類的實(shí)例時(shí),這個(gè)當(dāng)成員引用或操作的信息是關(guān)于類而不是類的實(shí)例時(shí),這個(gè)成員就應(yīng)該設(shè)
40、置為靜態(tài)成員。例如,可以使用一個(gè)靜態(tài)方法成員就應(yīng)該設(shè)置為靜態(tài)成員。例如,可以使用一個(gè)靜態(tài)方法來統(tǒng)計(jì)類對(duì)象的數(shù)量,或者使用靜態(tài)方法來維護(hù)有關(guān)類的對(duì)來統(tǒng)計(jì)類對(duì)象的數(shù)量,或者使用靜態(tài)方法來維護(hù)有關(guān)類的對(duì)象的日志信息。象的日志信息。 具體示例見下頁。具體示例見下頁。using System;namespace StaticExampleenum GenderMale, Femaleclass Lionprivate static int males;private static int females;public Lion(Gender lionGender)if (lionGender = Gen
41、der.Male)males+;elsefemales+;public static int NumberMales()return males;using System;namespace StaticExampleclass ZooDemostatic void Main(string args)Lion male1 = new Lion(Gender.Male);Lion male2 = new Lion(Gender.Male);Lion male3 = new Lion(Gender.Male);Console.WriteLine(Males 0, Lion.NumberMales(
42、);Console.ReadLine();q 靜態(tài)構(gòu)造函數(shù)靜態(tài)構(gòu)造函數(shù) 只會(huì)執(zhí)行一次只會(huì)執(zhí)行一次 在第一個(gè)對(duì)象創(chuàng)建以前運(yùn)行在第一個(gè)對(duì)象創(chuàng)建以前運(yùn)行 沒有參數(shù)沒有參數(shù) 沒有訪問修飾符沒有訪問修飾符 可與類的構(gòu)造函數(shù)一起存在可與類的構(gòu)造函數(shù)一起存在 用來初始化類用來初始化類q 示例示例1:假定有若干個(gè)動(dòng)物類,每個(gè)類都有一個(gè):假定有若干個(gè)動(dòng)物類,每個(gè)類都有一個(gè)family類成員,所有獅子都屬于類成員,所有獅子都屬于felidae(貓科貓科)家族。因此,需家族。因此,需要為這個(gè)類設(shè)定相應(yīng)的信息。要為這個(gè)類設(shè)定相應(yīng)的信息。class Lion static private string family;s
43、tatic Lion()family = felicdae; /貓科動(dòng)物貓科動(dòng)物q 示例示例2:如果類的所有實(shí)例都需要初始化某項(xiàng)計(jì)算所涉及的一如果類的所有實(shí)例都需要初始化某項(xiàng)計(jì)算所涉及的一系列數(shù)值,或者要加載一個(gè)數(shù)據(jù)記錄集,那么,最好系列數(shù)值,或者要加載一個(gè)數(shù)據(jù)記錄集,那么,最好的方法是這個(gè)任務(wù)只為該類執(zhí)行一次,而不必在每次的方法是這個(gè)任務(wù)只為該類執(zhí)行一次,而不必在每次創(chuàng)建類的實(shí)例時(shí)都執(zhí)行。下面示例使用了創(chuàng)建類的實(shí)例時(shí)都執(zhí)行。下面示例使用了.NET框架提框架提供的供的System.Random,它是一個(gè)偽隨機(jī)數(shù)產(chǎn)生器,用,它是一個(gè)偽隨機(jī)數(shù)產(chǎn)生器,用于產(chǎn)生隨機(jī)數(shù)。于產(chǎn)生隨機(jī)數(shù)。using System;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二手車銷售質(zhì)量保證合同書
- 政府項(xiàng)目招標(biāo)與投標(biāo)操作手冊(cè)
- 分季度財(cái)務(wù)預(yù)算明細(xì)表
- 農(nóng)村農(nóng)業(yè)項(xiàng)目資金使用協(xié)議
- 基礎(chǔ)工作流程簡明教程與指南
- 員工辦公電腦使用說明書
- 理發(fā)師學(xué)徒專用合同
- 《數(shù)學(xué)函數(shù)圖像理解與問題解決》
- 企業(yè)戰(zhàn)略聯(lián)盟合作能力提升效果評(píng)估預(yù)案
- 汽車股份轉(zhuǎn)讓合同
- 2025年農(nóng)業(yè)發(fā)展集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 對(duì)話民族英雄戚繼光知到智慧樹章節(jié)測(cè)試課后答案2024年秋煙臺(tái)科技學(xué)院
- 2025山東青島市屬事業(yè)單位公開招聘筆試和高頻重點(diǎn)提升(共500題)附帶答案詳解
- 臨床護(hù)理死亡病例討論
- 《奢香夫人》歌詞(男女聲歌詞標(biāo)注)
- 2025年廣東韶關(guān)城投集團(tuán)招聘筆試參考題庫含答案解析
- iso28000-2022供應(yīng)鏈安全管理手冊(cè)程序文件表單一整套
- 養(yǎng)老院敬老院福利醫(yī)養(yǎng)機(jī)構(gòu)消防知識(shí)培訓(xùn)科普講座教學(xué)課件
- 商業(yè)辦公樓網(wǎng)絡(luò)改造施工方案
- 子癇診斷及治療
- 2025屆海南省海口市名校高考英語二模試卷含解析
評(píng)論
0/150
提交評(píng)論